2011-08-29 130 views
5

我正在開發一個應用程序,其中客戶端通過Socket.io連接到nodejs服務器並訂閱各種事件。這些訂閱相當複雜,無法使用Socket.IO的通道功能處理。如何模擬Socket.IO中的連接故障

這意味着客戶端需要跟蹤其訂閱,並且在斷開連接時可能必須重新訂閱。不幸的是,我不太確定Socket.IO如何處理重新連接,以及客戶端發生的透明度如何。

所以,這裏的問題是:如何模擬連接失敗並強制Socket.IO重新連接?

+3

拔下以太網電纜並重新插入? – xavierm02

+0

或者,也許只是先刪除任何一方的連接,然後再關閉它,以查看對方的反應。 – xavierm02

+0

@ xavierm02:這可行,但真的不是你想在單元測試中使用的方法:-)我該如何「刪除」連接? – n3rd

回答

-1

本例從我的經驗,我發現這是最簡單的和有用的解決方案:

客戶端:

// the next 3 functions will be fired automatically on a disconnect. 
// the disconnect (the first function) is not required, but you know, 
// you can use it make some other good stuff. 

socket.on("disconnect", function() { 
    console.log("Disconnected"); 
}); 

socket.on("reconnect", function() { 
    // do not rejoin from here, since the socket.id token and/or rooms are still 
    // not available. 
    console.log("Reconnecting"); 
}); 

socket.on("connect", function() { 
    // thats the key line, now register to the room you want. 
    // info about the required rooms (if its not as simple as my 
    // example) could easily be reached via a DB connection. It worth it. 
    socket.emit("registerToRoom", $scope.user.phone); 
}); 

服務器端:

io.on('connection', function(socket){ 
    socket.on("registerToRoom", function(userPhone) { 
    socket.join(userPhone); 
    }); 
}); 

而那就是它。非常簡單直接。

您還可以在連接的套接字(最後一個功能)中添加更多用戶顯示更新,例如刷新其索引或其他內容。