根据我上一个问题的指示,我现在在socket.io中有一个连接的用户数组。我的问题(我在答案中被警告过)是,即使在浏览器断开连接后,套接字仍然留在这个数组中。
我尝试在socket.on('disconnect'
函数中从数组中删除套接字,但是在浏览器断开连接和套接字之间仍然有~1分钟的延迟。IO触发断开连接
"测试"一个套接字看它是否真的活着的最好方法是什么?我想尝试发送消息并捕获任何错误,但我觉得有一个更优雅的解决方案。
如何测试"socket是否仍然打开"
if(socket.readyState === socket.OPEN)
{
}
工作原理:
https://developer.mozilla.org/en-US/docs/Web/API/WebSocketreadyState =连接的当前状态;这是Ready状态之一常量。只读的。
"就绪状态常数"
连接0:连接尚未打开。
OPEN 1:连接打开,准备通信。
CLOSING 2:连接正在关闭中。
CLOSED 3:连接已关闭或无法打开。
我在断开连接处理程序中有一个错误。我最后用的是:
socket.on('disconnect', function() {
users.splice(users.indexOf(socket), 1);
});
socket.on('end',function(){
//your code
})
或
socket.on('error',function(err){
//in case of any errors
})
在所有客户端都断开连接之前,disconnect事件不会触发!