测试套接字是否仍处于打开状态

3

根据我之前在问题中的指示,我现在有了一个socket.io连接用户数组。我的问题(在答案中已经被警告)是即使浏览器断开连接,socket仍然停留在该数组中。

我尝试在socket.on('disconnect'函数中从数组中删除socket,但是在浏览器断开连接和socket.io触发断开连接之间仍然存在约1分钟的延迟。

最好的方法是“测试”socket以查看其是否真正活动?我想尝试发送消息并捕获任何错误,但我觉得有一种更优雅的解决方案。


2
你可以尝试减少close timeout,参考链接:https://dev59.com/L1rUa4cB1Zd3GeqPlqLM,默认值为60秒。 - undefined
3个回答

4
如何测试“套接字是否仍然打开”的解决方案
if(socket.readyState === socket.OPEN)
{
}

为什么它能够工作:

readyState = 连接的当前状态;这是 Ready state 常量之一。只读。

"Ready state 常量"
CONNECTING 0:连接尚未打开。
OPEN 1:连接已打开,可以通信。
CLOSING 2:连接正在关闭的过程中。
CLOSED 3:连接已关闭或无法打开。

https://developer.mozilla.org/zh-CN/docs/Web/API/WebSocket


0
我在我的断开处理程序中遇到了一个错误。最终我使用的是:
socket.on('disconnect', function() {
    users.splice(users.indexOf(socket), 1);
});

0
socket.on('end',function(){
//your code
})

或者

socket.on('error',function(err){
//in case of any errors
})

断开事件直到所有客户端都断开连接才会触发!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接