我正在開發一個應用程序,其中客戶端通過Socket.io連接到nodejs服務器並訂閱各種事件。這些訂閱相當複雜,無法使用Socket.IO的通道功能處理。如何模擬Socket.IO中的連接故障
這意味着客戶端需要跟蹤其訂閱,並且在斷開連接時可能必須重新訂閱。不幸的是,我不太確定Socket.IO如何處理重新連接,以及客戶端發生的透明度如何。
所以,這裏的問題是:如何模擬連接失敗並強制Socket.IO重新連接?
我正在開發一個應用程序,其中客戶端通過Socket.io連接到nodejs服務器並訂閱各種事件。這些訂閱相當複雜,無法使用Socket.IO的通道功能處理。如何模擬Socket.IO中的連接故障
這意味着客戶端需要跟蹤其訂閱,並且在斷開連接時可能必須重新訂閱。不幸的是,我不太確定Socket.IO如何處理重新連接,以及客戶端發生的透明度如何。
所以,這裏的問題是:如何模擬連接失敗並強制Socket.IO重新連接?
Socket.io在您的套接字對象中爲您提供事件。其實,你可以通過閱讀他們的API來找到各種工具。
本例從我的經驗,我發現這是最簡單的和有用的解決方案:
客戶端:
// 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);
});
});
而那就是它。非常簡單直接。
您還可以在連接的套接字(最後一個功能)中添加更多用戶顯示更新,例如刷新其索引或其他內容。
拔下以太網電纜並重新插入? – xavierm02
或者,也許只是先刪除任何一方的連接,然後再關閉它,以查看對方的反應。 – xavierm02
@ xavierm02:這可行,但真的不是你想在單元測試中使用的方法:-)我該如何「刪除」連接? – n3rd