按照上一个问题的说明,我现在在 socket.io 中有一组已连接的用户。我的问题(我在答案中被警告过)是即使在浏览器断开连接后套接字仍保留在此数组中。
我尝试在函数中从数组中删除套接字socket.on('disconnect'
,但是在浏览器断开连接和 socket.io 触发断开连接之间仍有约 1 分钟的延迟。
“测试”套接字以查看其是否真的存在的最佳方法是什么?我很想尝试发送消息并捕获任何错误,但我觉得有一个更优雅的解决方案。
按照上一个问题的说明,我现在在 socket.io 中有一组已连接的用户。我的问题(我在答案中被警告过)是即使在浏览器断开连接后套接字仍保留在此数组中。
我尝试在函数中从数组中删除套接字socket.on('disconnect'
,但是在浏览器断开连接和 socket.io 触发断开连接之间仍有约 1 分钟的延迟。
“测试”套接字以查看其是否真的存在的最佳方法是什么?我很想尝试发送消息并捕获任何错误,但我觉得有一个更优雅的解决方案。
关于如何测试“套接字是否仍然打开”的解决方案
if(socket.readyState === socket.OPEN)
{
}
为什么有效:
readyState = 连接的当前状态;这是就绪状态常量之一。只读。
“就绪状态常量”
CONNECTING 0:连接尚未打开。
OPEN 1:连接已打开并准备好进行通信。
CLOSING 2:连接正在关闭。
CLOSED 3:连接已关闭或无法打开。
socket.on('end',function(){
//your code
})
或者
socket.on('error',function(err){
//in case of any errors
})
在所有客户端断开连接之前,断开连接事件不会触发!
我的断开连接处理程序出错。我最终使用的是:
socket.on('disconnect', function() {
users.splice(users.indexOf(socket), 1);
});