如何检测socket.io上的断开连接?

时间:2013-11-15 17:51:23

标签: javascript node.js socket.io

我在我的项目中使用socket.io。我打开了重新连接功能。我想如果用户断开与服务器的连接显示警报(您的互联网连接丢失。尝试重新连接)。如果用户再次重新连接,我想再显示一个警告(别担心,你已连接)。

我该怎么做?

3 个答案:

答案 0 :(得分:20)

要在客户端上检测,请使用

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

这与node.js服务器的代码完全相同。

如果您出于某种原因想要检测用户是否断开连接并将其显示给其他用户,您将需要使用服务器一来检测该人离开,然后使用以下内容向其他人发回消息: / p>

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

希望这有帮助

答案 1 :(得分:9)

socket.io发生disconnect事件,将其放入connect区块内:

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

答案 2 :(得分:0)

我用这种方式解决了这个问题。我在客户端上发了一个发送发送方,它在服务器上调用了heartbeat。

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();