我一直在尝试断开与命名空间甚至主套接字连接本身的连接,但一直在失败。以下是我的代码
服务器端:
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命名空间。
答案 0 :(得分: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();
}
}
};
答案 1 :(得分:1)
对于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;
这对我有用。
答案 2 :(得分:0)
看起来你没有告诉客户端在重新连接之前等待断开连接。
// already connected to /world namespace
socket.emit('userDisconnect');
socket.on('disconnect', function () {
socket = io.connect('http://something/india');
// stuff with india socket
});
答案 3 :(得分:0)
在服务器或客户端上使用disconnect()方法(或者像您在示例中所做的那样)。首次连接到服务器时,请在客户端连接方法中添加' forceNew':false,如下所示:
var socket = io('http://localhost:3001', {'forceNew':false});
答案 4 :(得分:0)
在服务器上
nsp.on('connection', (socket) => {
setTimeout(() => {
socket.disconnect(false)
}, 5000);
});
断开此客户端的连接。如果close的值为true,则关闭基础连接。否则,它将断开名称空间的连接。在文档https://socket.io/docs/server-api/
中