2015-03-25 190 views
1

我目前正在使用socket.io工作,並且我不確定完全瞭解重新連接的機制。socket.io確保客戶端重新連接狀態

由於斷開連接可能發生在客戶端,我想知道如何維護服務器上的套接字狀態。我已經知道socket.io-client會嘗試自動重新連接,但我想知道是否有可能確保服務器端的套接字狀態。

我想到一個基於cookie的會話,例如express,但是我不確定我是否正在採取這種方式。我應該考慮另一種解決方案嗎?

爲了記錄,我成功地將HAProxy配置爲基於cookie的粘滯會話機制。是否有可能將此機制與socket.io服務器上的cookie會話混合?

感謝

威廉

+0

需要持續哪些狀態信息? – gregnr 2015-03-25 01:34:52

+0

套接字的房間列表以及來自mongo數據庫的userId。 – 2015-03-25 01:45:01

+0

該信息已存儲在每個套接字的服務器端,並且可以隨時訪問。它仍然不明顯,你實際上正在試圖解決什麼問題。 – jfriend00 2015-03-25 01:45:46

回答

0

我認爲基於Cookie的會話是你最好的選擇。看看session.socket.io模塊。看起來它是專門爲此設計的。

var SessionSockets = require('session.socket.io'); 
var sessionSockets = new SessionSockets(io, sessionStore, cookieParser); 

sessionSockets.on('connection', function (err, socket, session) { 

    //your regular socket.io code goes here 
    //and you can still use your io object 

    session.foo = 'bar'; 
    //at this point the value is not yet saved into the session 

    session.save(); 
    //now you can read session.foo from your express routes or connect middlewares 

}); 

或者你也可以實現自己使用表達你提到的會議。我不知道有任何與HAProxy集成的簡單方法。

+0

嘿!你認爲它可以與非瀏覽器客戶端合作嗎,比方說節點客戶端? – 2015-03-25 02:04:12

+0

不是沒有一些工作。 Cookie通過HTTP握手中的標頭傳遞,Node的socket.io-client似乎不支持修改這些標頭。如果您確實需要非瀏覽器客戶端,那麼最簡單的解決方案可能就是在連接時監聽來自客戶端的事件,以便傳遞會話信息。或者,您可以通過查詢字符串傳遞它。看[這個答案](http://stackoverflow.com/questions/13745519/)。 – gregnr 2015-03-25 02:27:04

相關問題