2017-01-04 3 views
0

Socket.io Как обрабатывать событие интернет-отключения клиента? Я прочитал heartbeat на stackoverflow, но это решение не работает для меня.Socket.io handle Клиентский интернет-событие

Я нашел ping solution, но я думаю, что это плохой подход к свистеть все подключенные пользователь, это будет замедлять сервер

вот мой код, любезно руководство, как обрабатывать события интернет разъединения?

io.on('connection', function(client) { 
    client.on('online', function(data) { 
     socket_api.user_online(data.user_id, function (err,res){ 
      if (err) { 
       client.emit ('error',err); 
      } else { 
       console.log ("client connected") 
       client.emit ('online_response', res); 
      } 

     }); 
     // client.emit('messages', 'Hello from server'); 
    }); 
    client.on('disconnect', function (data){ 
     console.log ("Client disconnected"); 
    }); 
}); 
+0

'пинг-pong' требуется для' websocket' –

+0

Когда клиент теряет подключение к интернету, сервер получит отключить событие. Это может быть не сразу, но это произойдет. Я думаю, что ваш вопрос, вероятно, является дуптом этого: [как обнаружить, что соединение пользователя потеряно, или он закрыл окно браузера в Nodejs socket.io] (http://stackoverflow.com/questions/16293520/how-to-detect -that-users-connection-is-lost-or-he-closed-the-browser-window-in), и этот [Socket IO обнаруживает, когда клиент потерял соединение] (http://stackoverflow.com/questions/9182695/сокет-IO-обнаруживать, когда-клиент-имеет-потерянный-соединение). – jfriend00

+0

Проверите ли вы, что решение ping не повлияет на производительность сервера узлов? Это хороший подход? –

ответ

0
// use this on server side 
function sendHeartbeat(){ 
    setTimeout(sendHeartbeat, 8000); 
    io.sockets.emit('ping', { beat : 1 }); 
} 

io.sockets.on('connection', function (socket) { 
    socket.on('pong', function(data){ 
     console.log("Pong received from client"); 
    }); 
} 

setTimeout(sendHeartbeat, 8000); 

........................................ .........

// on Client side 
socket.on('ping', function(data){ 
      socket.emit('pong', {beat: 1}); 
     }); 

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

решение на основе
+0

Можете ли вы рассказать мне, как сократить время на разметку пользовательского разъединения? Что именно делает сокет, когда пользователь потерял соединение, он отмечает, что пользователь отключается через 2 минуты, я хочу уменьшить эту задержку до 1 мин. –

+0

. Пожалуйста, прочитайте эту [ссылку] (http://stackoverflow.com/questions/9708604/nodejs- socket-io-connections-dropping-reconnecting) –

+0

@majeet, но этот код не имеет события отключения? Как он справится? Не могли бы вы объяснить? –

Смежные вопросы