2016-11-10 73 views
0

我正在使用PM2來管理我的應用程序遊戲服務器,我與他們的羣集模式搞砸周圍:是否有可能在0宕機時間內重新啓動NodeJS + socket.io?

pm2 start app.js -i max 
pm2 reload 

和我想的停機時間大約爲0,但我所有的我的插座仍然得到斷開。我不能使用

{reconnection: true} 

爲我的客戶,因爲有上保存死者的插座,也是服務器本身上,丟失的數據會崩潰瀏覽器重要的事情。

每當我需要更新我的服務器js文件時,我的所有客戶端都會丟失連接,這很糟糕。

回答

0

關閉服務器(或突然重新啓動)會導致內存中的這些項目丟失數據。 NodeJS在重啓時可能會很快,但所有這些腳本和對象狀態都會丟失。

對於您的策略可能是雙重的: 1)將客戶端信息存儲在數據庫中,可能是Redis之類的緩存數據庫,或者在您的服務器重新啓動時可能會持續存在。每個客戶端都有一個會話令牌來標識它們以及您希望與該客戶端保持的數據。 2)當客戶端連接到服務器時,將會話標識符存儲在連接上。當客戶端(自動)重新連接時,他們必須通過你的序列a)重新建立他們的會話b)重新加入他們的socket.io房間c)恢復他們的狀態(或者得到任何錯過的更新)。

+0

那麼什麼樣的集羣模式完全可以做到呢?不是他們的工作,以保持某種方式在服務器上的信息? – user1938653

+0

集羣模式運行NodeJS應用程序(它是單線程的)的幾個副本,儘管某些事情由Node共享/管理以知道要將工作發送到哪個集羣等。集羣用於單個服務器運行節點,主要用於更多的處理核心(因爲它是單線程的) – clay

相關問題