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.
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 :-/
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?