2013-11-15 215 views
11

我在我的项目中使用socket.io。我打开了重新连接功能。我想如果用户断开与服务器显示警报(您的互联网连接丢失,尝试重新连接)。如果用户再次重新连接,我想显示更多的警报(不要担心,您已连接)。如何检测socket.io上的断开连接?

我该怎么办?

回答

6

socket.iodisconnect事件,把这个你connect块中:

socket.on('disconnect', function() { 
    //do stuff 
}); 
15

在客户端上检测到您使用

// CLIENT CODE 
    socket.on('disconnect', function(){ 
     // Do stuff (probably some jQuery) 
    }); 

这是完全相同的代码如对上述的node.js服务器。

如果您因为某种原因想要检测到用户断开连接并将其显示给其他用户,则需要使用服务器之一来检测该用户离开,然后使用类似如下内容向其他用户发送消息:

socket.on('disconnect', function(){ 
    socket.broadcast.to(roomName).emit('user_leave', {user_name: "johnjoe123"}); 
}); 

希望这有助于

+0

感谢您reply.Now断开部分确定,但我该怎么做重新的一部分? – user2997295

+1

服务器如何知道是否有干净的断开连接或客户端的互联网连接断开? – bluejamesbond

0

我这种方式处理这个问题。我在客户端上发送了一个发送发送者,它正在调用服务器上的心跳。

socket.on('heartbeat', function() { 
     // console.log('heartbeat called!'); 
     hbeat[socket.id] = Date.now(); 
     setTimeout(function() { 
      var now = Date.now(); 
      if (now - hbeat[socket.id] > 5000) { 
       console.log('this socket id will be closed ' + socket.id); 
       if (addedUser) { 
        --onlineUsers; 
        removeFromLobby(socket.id); 

        try { 
         // this is the most important part 
         io.sockets.connected[socket.id].disconnect(); 
        } catch (error) { 
         console.log(error) 
        } 
       } 
      } 
      now = null; 
     }, 6000); 
    }); 

我发现这个代码函数调用:

io.sockets.connected[socket.id].disconnect();