3

名前空間から、またはメイン ソケット接続自体からも切断しようとしましたが、失敗しています。以下は私のコードです

サーバ側:

 socket.on('userDisconnect', function () {        
    socket.disconnect();
    console.log("User Disconnected");       

}); 

クライアント側:

// already connected to /world namespace
socket.emit('userDisconnect');
    socket.disconnect();
socket = io.connect('http://something/india' );

クライアント側とサーバー側の両方から切断しようとしましたが、うまくいきません。誰でも間違いを指摘できます。これは、socket.io によってコンソールに書き込まれたものです。

   info  - booting client
 debug - websocket writing 0::/world
User Disconnected
   debug - client authorized for /india
   debug - websocket writing 1::/india

/world は、切断しようとしている名前空間であり、次に /india 名前空間に接続しようとしています。

4

5 に答える 5

2

これは私のために働いた

broadcastSocket.packet({ type: 'disconnect' });
    broadcastSocket.$emit('disconnect');
    disconnectNamespace(broadcastSocket.name, broadcastSocket.socket);        


function disconnectNamespace (name,socket) {
    if (socket.namespaces[name]) {
        var nsp = socket.of(name);
        nsp.packet({ type: 'disconnect' });
        nsp.$emit('disconnect');
        delete socket.namespaces[name];

        if (Object.keys(socket.namespaces).length === 0) {
            socket.disconnect();
        }
    }
};
于 2013-06-14T12:16:25.293 に答える
0

再接続する前に切断を待つようにクライアントに指示したようには見えません。

// already connected to /world namespace
socket.emit('userDisconnect');
socket.on('disconnect', function () {
  socket = io.connect('http://something/india');
  // stuff with india socket
});
于 2013-04-19T17:01:35.813 に答える
0

サーバーまたはクライアントで disconnect() メソッドを使用します (または、例で行ったように両方)。サーバーに初めて接続するときは、次のようにクライアント接続メソッドに 'forceNew':false を追加します。

var socket = io('http://localhost:3001', {'forceNew':false});
于 2015-02-03T22:19:15.343 に答える