测试套接字是否仍然打开

Test if socket is still open

本文关键字:套接字 是否 测试      更新时间:2023-09-26

根据我上一个问题的指示,我现在在socket.io中有一个连接的用户数组。我的问题(我在答案中被警告过)是,即使在浏览器断开连接后,套接字仍然留在这个数组中。

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

"测试"一个套接字看它是否真的活着的最好方法是什么?我想尝试发送消息并捕获任何错误,但我觉得有一个更优雅的解决方案。

如何测试"socket是否仍然打开"

if(socket.readyState === socket.OPEN)
{
}

工作原理:

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

"就绪状态常数"
连接0:连接尚未打开。
OPEN 1:连接打开,准备通信。
CLOSING 2:连接正在关闭中。
CLOSED 3:连接已关闭或无法打开。

https://developer.mozilla.org/en-US/docs/Web/API/WebSocket

我在断开连接处理程序中有一个错误。我最后用的是:

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事件不会触发!