2012-03-05 74 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

也許你應該試圖找出客戶端斷開連接的真正原因?即這是一個錯誤的連接,或防火牆問題,或其他?

此外,你應該檢查你的斷開連接出現錯誤,如果它是一個乾淨的斷開(沒有錯誤),你做正常的通知,但如果它是一個錯誤,你可能想以不同的方式處理它。