Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何在socket.io中完全断开与命名空间的连接?_Node.js_Sockets_Azure_Websocket_Socket.io - Fatal编程技术网

Node.js 如何在socket.io中完全断开与命名空间的连接?

Node.js 如何在socket.io中完全断开与命名空间的连接?,node.js,sockets,azure,websocket,socket.io,Node.js,Sockets,Azure,Websocket,Socket.io,我一直在尝试断开与命名空间的连接,甚至与主套接字连接本身的连接,但一直失败。下面是我的代码 服务器端: socket.on('userDisconnect', function () { socket.disconnect(); console.log("User Disconnected"); }); 客户端: // already connected to /world namespace socket.emit('userDisconn

我一直在尝试断开与命名空间的连接,甚至与主套接字连接本身的连接,但一直失败。下面是我的代码

服务器端:

 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名称空间。

看起来不像是您告诉客户端在重新连接之前等待断开连接

// already connected to /world namespace
socket.emit('userDisconnect');
socket.on('disconnect', function () {
  socket = io.connect('http://something/india');
  // stuff with india socket
});
这对我有用

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();
        }
    }
};
适用于socket.io v.1.3.2

创建时使用:

sio = io('ws://localhost:13000/device');
删除以下内容:

sio.disconnect();
delete sio.io.nsps[sio.nsp]; // sio.nsp = '/device'
delete sio;
这对我来说很有效。

在服务器或客户端上使用disconnect()方法(或两者都使用,就像您在示例中所做的那样)。第一次连接到服务器时,将“forceNew”:false添加到客户端连接方法,如下所示:

var socket = io('http://localhost:3001', {'forceNew':false});
在服务器上

nsp.on('connection', (socket) => {
   setTimeout(() => {
      socket.disconnect(false)
   }, 5000);
});

断开此客户端的连接。如果close的值为true,则关闭基础连接。否则,它只会断开名称空间的连接。它在文档中

对迟来的答复表示歉意。但是,即使按照你的建议,我也遇到了同样的问题:(有没有办法检查插座是否断开了?