Socket.io-client: Kesalahan namespace tidak valid (hanya di Linux Ubuntu)

Dibuat pada 13 Okt 2016  ·  16Komentar  ·  Sumber: socketio/socket.io-client

Saya memiliki skrip NodeJS yang dimaksudkan untuk dijalankan di perangkat, dan aplikasi di server. Saya ingin menghubungkan perangkat ke ruang nama /device di server. Ini bekerja dengan sempurna di Windows. Namun di Ubuntu perangkat tidak pernah terhubung. Melewati variabel env DEBUG di memberikan output ini:

socket.io-client:url parse http://localhost:3000/device +0ms
  socket.io-client new io instance for http://localhost:3000/device +7ms
  socket.io-client:manager readyState closed +5ms
  socket.io-client:manager opening http://localhost:3000/device +0ms
  engine.io-client:socket creating transport "websocket" +3ms
  engine.io-client:socket setting transport websocket +47ms
  socket.io-client:manager connect attempt will timeout after 20000 +2ms
  socket.io-client:manager readyState opening +4ms
  engine.io-client:socket socket receive: type "open", data "{"sid":"oYxMG7iQuy2Rp7LWAAAN","upgrades":[],"pingInterval":25000,"pingTimeout":60000}" +51ms
  engine.io-client:socket socket open +1ms
  socket.io-client:manager open +1ms
  socket.io-client:manager cleanup +1ms
  socket.io-client:socket transport is open - connecting +1ms
  socket.io-client:manager writing packet {"type":0,"query":"deviceId=123456789abcdef","nsp":"/device"} +1ms
  socket.io-parser encoding packet {"type":0,"query":"deviceId=123456789abcdef","nsp":"/device?deviceId=123456789abcdef"} +0ms
  socket.io-parser encoded {"type":0,"query":"deviceId=123456789abcdef","nsp":"/device?deviceId=123456789abcdef"} as 0/device?deviceId=123456789abcdef +1ms
  engine.io-client:socket flushing 1 packets in socket +1ms
  engine.io-client:socket socket receive: type "message", data "0" +14ms
  socket.io-parser decoded 0 as {"type":0,"nsp":"/"} +2ms
  engine.io-client:socket socket receive: type "message", data "4/device?deviceId=123456789abcdef,"Invalid namespace"" +3ms
  socket.io-parser decoded 4/device?deviceId=123456789abcdef,"Invalid namespace" as {"type":4,"nsp":"/device?deviceId=123456789abcdef","data":"Invalid namespace"} +2ms

Yaitu namespace tampaknya tidak valid. Saya tidak tahu mengapa, karena kode ini berjalan dengan sempurna di Windows.
Kode perangkat saya (klien):

const socket = io.connect('http://localhost:3000/device', {
    transports: ['websocket'],
    secure: true,
    query: { deviceId: '123456789abcdef' }
});

socket.on('connect', function() {
    console.log('Connection to server established');
})

Kode server saya:

  const device = io.of('/device'),
      portal = io.of('/portal');

  device.on('connection', function(socket) {
      console.log('Connection made');
  })

Setiap ide akan berguna.

Unable to reproduce

Komentar yang paling membantu

Saya menggunakan 1.7.3 dan kesalahannya masih ada. Menurunkan versi ke 1.4.8 membantu, tetapi fungsi emit tampaknya bekerja secara berbeda. Apakah ada kemajuan dalam memperbaiki ini di 1.7.3?

Semua 16 komentar

Saya perhatikan ini juga di socket.io-client versi 1.5.0. Tampaknya untuk beberapa alasan nilai opts.query ditambahkan ke nama ruang nama, yang menyebabkan kesalahan "Ruang nama tidak valid".

contoh:

io.connect("/hello", {
  query: "foo=bar"
})

Seharusnya terhubung ke namespace /hello tetapi sebaliknya ia mencoba terhubung ke namespace /hello?foo=bar .

Saya mengujinya di 1.4.8 dan tidak ada kesalahan, jadi bug ini diperkenalkan di suatu tempat setelah itu. (Saya juga tidak berpikir bug ini terkait dengan Ubuntu secara khusus karena saya dapat mereproduksinya di Win7 dan Mint Rosa.)

Ah oke itu masuk akal. Hm. Apakah Anda punya ide untuk obatnya, atau di mana dalam repo saya harus mencari jika saya ingin memperbaikinya?

Tidak tahu bagaimana cara memperbaikinya, tetapi Anda dapat menurunkan versi ke [email protected] mana bug ini tidak ada, itulah yang saya lakukan.

Itu mungkin ditautkan ke https://github.com/socketio/socket.io-client/pull/943 (dan https://github.com/socketio/socket.io/pull/2422)

Saya mengujinya di v1.4.8 dan berhasil seperti yang diharapkan. Kemudian saya mengujinya dengan v1.5 hanya pada klien dan berhenti bekerja. Namun, menginstal v1.5 di server _and_ client memperbaiki masalah.

Jadi sepertinya bug hanya terjadi ketika ada ketidakcocokan versi antara client dan server, tetapi tidak ketika keduanya memiliki versi yang sama, baik yang di atas atau di bawah v1.5.

@Arrow7000 dapatkah Anda memeriksa apakah 1.6.0 memperbaiki masalah Anda?

Saya masih mengalami masalah ini dengan v1.7.2

@stgogm apakah Anda menggunakan 1.7.2 pada klien dan server? Apakah itu masalah yang sama persis?

@darrachequesne Ya, saya. Dan kesalahannya sama: Ia mencoba menyambung ke /namespace?q=value , misalnya, alih-alih menyambung ke /namespace dan meneruskan q sebagai parameter kueri.

@stgogm dapatkah Anda memberikan kasus uji yang gagal? Sepertinya saya tidak dapat mereproduksi: https://github.com/darrachequesne/socket.io-fiddle/tree/issue/invalid-namespace

@darrachequesne Efektif, kesalahan hilang. Mungkin backend tidak diperbarui pada waktu itu. Maaf atas laporan yang salah dan terima kasih atas waktu Anda!

Saya mengalami masalah yang sama, yang berfungsi di klien versi 1.4.8 tetapi gagal di 1.5.1. (Saya menjalankan versi server socket.io yang lebih lama) Apakah ini berarti bahwa versi klien dan server dari socket.io harus selalu cocok? Apakah itu dinyatakan di suatu tempat?

Saya menggunakan 1.7.3 dan kesalahannya masih ada. Menurunkan versi ke 1.4.8 membantu, tetapi fungsi emit tampaknya bekerja secara berbeda. Apakah ada kemajuan dalam memperbaiki ini di 1.7.3?

Baru saja menemukan sesuatu yang mirip dengan ini .. namun tanpa string kueri. Saya hanya menelepon io([path]) w/ path === "activities" .

Saya memiliki pandangan di aplikasi saya yang membuat dua soket dengan spasi nama, "/ kunjungan" dan "/ kegiatan"... soket "/ kunjungan" terhubung dengan baik. Saya melihat pesan "Ruang Nama Tidak Valid" saat mencoba menyambung ke ruang nama "/ aktivitas".

Tidak yakin mengapa melakukan ini. Saya mengikuti pola yang sama untuk tampilan lain yang menggunakan "/ rumah" dan "/ kunjungan" dan kedua soket dibuat dengan baik pada tampilan itu.

@RavenHursT adalah ruang nama activities dibuat dengan benar? (dengan io.of('/activities'); )? Bisakah Anda mereproduksi masalah dengan biola di sini?

Yeah... mah buruk.. Saya lupa menambahkan namespace server-side dan lupa update disini. Tolong abaikan :-/

Apakah halaman ini membantu?
0 / 5 - 0 peringkat