获取Socket.io客户端上的连接状态

fra*_*zon 61 node.js socket.io

我正在使用Socket.io,我想知道从客户端连接到服务器的状态.

像这样的东西:

socket.status // return true if connected, false otherwise
Run Code Online (Sandbox Code Playgroud)

如果连接断开或因任何原因断开连接,我需要此信息给用户提供可视反馈.

rob*_*lep 112

您可以查看socket.connected酒店:

var socket = io.connect();
console.log('check 1', socket.connected);
socket.on('connect', function() {
  console.log('check 2', socket.connected);
});
Run Code Online (Sandbox Code Playgroud)

它是动态更新的,如果连接丢失,它将被设置为false直到客户端再次获取连接.很容易检查setInterval或类似的东西.

另一个解决方案是捕获disconnect事件并自己跟踪状态.

  • 在v1.0中,它现在是`socket.connected`而不是`socket.socket.connected`. (22认同)
  • 我通过`console.log`'找到了`socket`变量;) (7认同)
  • 它完美地运作.我没有在文档上找到这个属性,所以感谢宝贵的信息;) (3认同)
  • 在socket.io 2.0.2中我使用`socket.connected`并且它的行为与预期一致(返回true或false).在调用`io(server)`之后立即注意它是`false`但几乎立即变为`true`.我不确定这是不是竞争条件,但我注意到`io()`没有回调选项,所以我认为这就是它的工作原理. (2认同)
  • @IainCollins而不是回调,它使用事件.`io(...)`只是告诉`socket.io`连接,但只有当`connect`事件被发出时它才真正连接. (2认同)

小智 8

这些天,socket.on('connect', ...) 对我不起作用。我使用以下代码在第一次连接时进行检查。

if (socket.connected)
  console.log('socket.io is connected.')
Run Code Online (Sandbox Code Playgroud)

并在重新连接时使用此代码。

socket.on('reconnect', ()=>{
  //Your Code Here
});
Run Code Online (Sandbox Code Playgroud)


小智 6

您可以使用此功能检查连接是否丢失: -

var socket = io( /**connection**/ );
socket.on('disconnect', function(){
//Your Code Here
});
Run Code Online (Sandbox Code Playgroud)

希望它会对你有所帮助.