Как я могу обнаружить разъединения на 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();