Как я могу обнаружить разъединения на socket.io?

Я использую socket.io в своем проекте. Я включил функцию повторного подключения. Я хочу, чтобы пользователь отключился от сервера, показывая предупреждение (потеря вашего интернет-соединения. Попробуйте снова подключиться). И если пользователь снова подключится, я хочу показать еще одно предупреждение (не беспокойтесь, вы подключены).

Как я могу это сделать?

Ответ 1

Чтобы обнаружить на клиенте, вы используете

  // 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"});
});

Надеюсь, что это поможет

Ответ 2

socket.io имеет событие disconnect, поместив его в блок connect:

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

Ответ 3

Я справился с этой проблемой таким образом. Я сделал отправителя испускания на клиенте, который набирает 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();