2012-03-05 2 views
1

Я работаю над чат-приложением с Node.js и Socket.io, а при отключении оставшийся пользователь получает предупреждение о том, что их партнер отключен.Socket.io Обнаруживает, восстанавливается или полностью отключается

Проблема в том, что время от времени Socket.io автоматически отключается и снова соединяется. Приложение для чата запускает предупреждение, даже если партнер действительно не отключен.

Код:

var clients = {}; 
var soloClients = []; 
io.sockets.on('connection', function (socket) { 

    //Session start 
    socket.on('sessionStart', function() { 
     clients[socket.id] = socket; 
     soloClients.push(socket.id); 

     var searchClients = function(){ 
      if(soloClients.length > 1){ 
       var rand = Math.floor(Math.random() * soloClients.length); 
       if(soloClients[rand] && soloClients[rand] != socket.id){ 
        if(clients[soloClients[rand]]){ 
         var you = clients[socket.id]; 
         var partner = clients[soloClients[rand]] 

         clients[partner.id]['partner'] = you.id; 
         clients[you.id]['partner'] = partner.id; 
         soloClients.splice(soloClients.indexOf(you.id), 1); 
         soloClients.splice(soloClients.indexOf(partner.id), 1); 

         partner.emit('partnerConnect', null); 
         socket.emit('partnerConnect', null); 
        } 
        else{ 
         soloClients.splice(rand, 1); 
         searchClients; 
        } 
       } 
       else{ 
        searchClients(); 
       } 
      } 
     }; 
     searchClients(); 
    }); 

    //On disconnect 
    socket.on('disconnect', function(){ 
     soloClients.splice(soloClients.indexOf(socket.id), 1); 

     if(clients[socket.id]){ 
      if(clients[clients[socket.id]['partner']]){ 
       clients[clients[socket.id]['partner']].emit('partnerDisconnect', null); 
      } 
      delete clients[socket.id]; 
     } 
    }); 
}); 

мне было интересно, если есть способ решить эту проблему.

Спасибо!

ответ

0

Оказывается, это поведение не должно происходить, это была просто ошибка в этой версии. Эта ошибка была исправлена ​​в последней версии.

0

Возможно, вам стоит попробовать выяснить причину, по которой клиент отключается? То есть это плохая связь или проблемы с брандмауэром или что-то еще?

Кроме того, вы должны проверить ошибку, которую вы получаете от разъединения, если это чистое отсоединение (нет ошибки), вы делаете обычное уведомление, но если это ошибка, возможно, вы захотите обработать ее по-разному.

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