Socket.io-client: Connect -> Disconnect -> Connect tidak berfungsi

Dibuat pada 23 Jul 2011  ·  33Komentar  ·  Sumber: socketio/socket.io-client

Kode berikut tidak berfungsi untuk saya:
socket = io.connect ('http://host.com:8081'); socket.disconnect (); socket = io.connect ('http://host.com:8081');

Ini adalah solusi yang saya temukan:
socket = io.connect ('http://host.com:8081'); socket.disconnect (); hapus io.sockets [' http://host.com : 8081']; io.j = []; socket = io.connect ('http://host.com:8081');

Unable to reproduce bug

Komentar yang paling membantu

Gunakan yang ini: io.connect(null,{'force new connection':true});

Semua 33 komentar

Masalah yang sama di sini - tidak dapat menyambungkan-memutuskan-menyambungkan kembali seperti yang Anda jelaskan.

Namun, saya telah menemukan bahwa yang berikut berfungsi. Anehnya, jika Anda menghilangkan setTimeout dan segera menyambungkan kembali (atau setelah waktu tunggu yang terlalu singkat) maka Anda akan segera terputus.

var ns = io.connect(
        '/',
        { reconnect: false }
    ),
    numDisconnects = 2;

ns.on('connect', function () {

    console.log('Connected');

    if (numDisconnects > 0) {
        console.log('Disconnecting');
        ns.socket.disconnect();

        setTimeout(function () {
            console.log('Reconnecting');
            ns.socket.connect();
        }, 5000);
    }
    numDisconnects--;


});

ns.on('disconnect', function () {
    console.log('Disconnected');
});

socket = io.connect (host);
socket.disconnect ();
socket.socket.reconnect (); || socket.socket.connect (host);
berfungsi, tetapi karena sambungkan kembali atau putuskan sambungan kedua dipicu setiap beberapa detik

Saya memiliki masalah yang sama sehingga saya tidak dapat menyelesaikan entri sistem gugur node saya tepat waktu karena bug ini :(
Harap perbaiki sebelum patah hati lainnya!

Tidak ada solusi di atas yang berhasil untuk saya. Teman-teman, ini penghenti acara yang serius. Mengapa tag "Tidak dapat mereproduksi"? Pengujian saya env. adalah Chrome terbaru di OS X 10.6.

Saya melihat hal yang sama. Juga memanggil io.connect() untuk kedua kalinya gagal tanpa kesalahan. Adakah yang menemukan solusi?

Gunakan yang ini: io.connect(null,{'force new connection':true});

Betapa nyaman, dan jelek. Bagaimana dengan menghapus io.sockets[uuri] = socket; dari io.js:196 ? Apa gunanya garis pukulan itu?

Sayangnya, masalah yang sama terjadi di sini. Anda tidak dapat menyambungkan kembali setelah pemutusan.

Satu-satunya hal yang berhasil untuk saya setelah pemutusan sambungan:
io.j = [];
io.sockets = [];

Sunting: ini bukan hanya satu masalah dari pemutusan sisi klien (). Itu tidak membersihkan struktur data saat terputus - Anda dapat melihat bahwa SocketNamespace. $ Events masih memiliki semua callback untuk koneksi tertutup, dll.

@MrJoes Gunakan io.connect(null,{'force new connection':true});

Baiklah, apakah ini benar-benar API terakhir untuk menghubungkan kembali? Agak aneh.

@skrat Saya setuju dengan Anda. harus ada API io.reconnect .

Saya rasa tidak, io.connect lalu io.disconnect lalu io.connect seharusnya berfungsi, seperti yang diharapkan.

@milani : dan memori bocor karena soket yatim piatu, penangan acara, dll. tinggal di io.sockets []?

Jujur saja bukan ide yang bagus.

@MrJoes Apakah Anda yakin tentang kebocoran memori? @ 3rd-Eden dari io.socket menyuruh saya menggunakan API ini.

Tidak masalah, itu tidak akan menambahkan soket ke io.sockets [] jika Anda melewatkan 'paksa koneksi baru'.

Padahal, ini agak jelek, terutama dengan titik akhir, karena Anda kehilangan multiplexing - ini bergantung pada soket di io.sockets untuk melakukan multiplexing.

Saran @Gorokhov untuk menggunakan hubungkan kembali melalui prototipe soket bekerja dengan baik untuk saya:
socket.socket.reconnect ()
Terima kasih

Masalah yang sama di sini - socket.reconnect () tidak berfungsi untuk saya, saya akan mencoba beberapa solusi lain. Ini mengecewakan, ini adalah fungsionalitas yang cukup mendasar untuk dipecah dalam pembaruan. Saya yakin banyak aplikasi tidak dapat diperbarui dengan mudah karena ini.

Jika pengembang memerlukan bantuan untuk mereproduksi masalah tersebut, saya akan dengan senang hati membantu - saya terkejut melihat tag "tidak dapat mereproduksi" pada bug ini.

Sepertinya akan ada pembaruan besar segera karena permintaan tarik ini: https://github.com/LearnBoost/socket.io-client/pull/343
@cacois Coba gunakan socket.socket.reconnect () daripada socket.reconnect ()

ah, kabar baik :-)

@ wackfordjf3 Hei terima kasih, panggilan yang bagus. Bekerja sekarang. :)

Masih menghadapi masalah dengan menyambungkan kembali.
Sambungan ulang ke-2 menyebabkan beberapa peristiwa penyambungan kembali dijalankan di server. (dan ini berlipat ganda dengan setiap sambungan ulang berikutnya). Saya menembakkan kembali pada namespace.

socket = io.connect (url {'reconnect': false}); socket.disconnect; // Putuskan sambungan pertama
socket.socket.reconnect (); socket.disconnect (); // Putuskan sambungan ke-2
socket.socket.reconnect (); // Sambungkan kembali ke-2

Di: socket. [email protected]

Lebih lanjut dari ini:
Cara jelek bekerja dengan baik:
hapus io.sockets [url]; io.j = [];
socket = io.connect (url);

Hadapi hal yang sama seperti orang yang sudah ada di sini; bahkan aneh dalam skenario namespace. Jatuhkan solusi untuk namespacing:

var base = ' http: // localhost : 3000'
, saluran = '/ obrolan'
, url = basis + saluran;

var socket = io.connect (url);

// panggil socket.disconnect () tidak akan terputus, jadi:
io.sockets [base] .disconnect ();

// sambungkan kembali sintaks.
hapus io.sockets [base]; io.j = [];
socket = io.connect (url);

catatan: versi socket.io - 0.9.0, platform: windows 7 home premium

menghabiskan sore hari bergulat dengan tes unit yang waktunya habis karena saya tidak dapat tersambung setelah memutuskan sambungan. {'force new connection': true} menyelesaikan masalah. terima kasih @ilani

Masalah yang sama di sini menggunakan Cucumber.js. Karena saya harus membuat dan menghancurkan objek, saya menghadapi koneksi yang sama, putuskan, koneksi gagal. Thx @milani dan @rawberg

Ini berhasil untuk saya! Terima kasih @mrjoes.

Terima kasih @milani

Setelan 'paksa koneksi baru' sekarang disebut 'forceNew' dalam rilis v1.0 bagi mereka yang mungkin mengalami masalah ini lagi.

Saya mendorong komitmen untuk menambahkan BC dengan itu, jadi segera tidak ada yang akan mengalami masalah ini lagi!

4 saya berhasil, socket = io.connect (socketUrl, {'forceNew': true});

forceNew menonaktifkan seluruh sistem multiplexing namespace, apakah itu benar-benar solusinya?

Saya menggunakan:
socket = io.connect ()
...
// INI
socket.io.reconnect ()
..

Client.prototype.connect = function() {
    if (!this.connection) {
        this.connection = this.socket.connect(config.host + ':' + config.port);
    }
    else {
        if (!this.connection.connected) {
            this.connection.connect();
        }
    }
};

io.connect (null, {'force new connection': true});

ini menyelesaikan masalah saya, terima kasih mr. milami

Apakah halaman ini membantu?
0 / 5 - 0 peringkat