测试插座是否仍处于打开状态

时间:2013-03-13 20:18:54

标签: javascript node.js websocket socket.io

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

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

“测试”套接字以查看它是否真的存活的最佳方法是什么?我很想尝试发送消息并发现任何错误,但我觉得有更优雅的解决方案。

3 个答案:

答案 0 :(得分:0)

我的断开处理程序出错了。我最终使用的是:

socket.on('disconnect', function() {
    users.splice(users.indexOf(socket), 1);
});

答案 1 :(得分:0)

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

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

在所有客户端断开连接之前,断开事件不会触发!

答案 2 :(得分:0)

关于如何测试"套接字是否仍然打开"

的解决方案
if(socket.readyState === socket.OPEN)
{
}

为什么会这样:

  

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

     

"就绪状态常数"
  连接0:连接尚未打开。
  打开1:连接已打开并准备好进行通信。
  CLOSING 2:连接处于关闭过程中。
  已关闭3:连接已关闭或无法打开。

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