2013-11-15 248 views
11

我在我的項目中使用socket.io。我打開了重新連接功能。我想如果用戶斷開與服務器顯示警報(您的互聯網連接丟失,嘗試重新連接)。如果用戶再次重新連接,我想顯示更多的警報(不要擔心,您已連接)。如何檢測socket.io上的斷開連接?

我該怎麼辦?

回答

6

socket.iodisconnect事件,把這個你connect塊中:

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

在客戶端上檢測到您使用

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

希望這有助於

+0

感謝您reply.Now斷開部分確定,但我該怎麼做重新的一部分? – user2997295

+1

服務器如何知道是否有乾淨的斷開連接或客戶端的互聯網連接斷開? – bluejamesbond

0

我這種方式處理這個問題。我在客戶端上發送了一個發送發送者,它正在調用服務器上的心跳。

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();