簡體   English   中英

重新啟動實時的node.js服務器而不關閉套接字?

[英]Restarting a realtime node.js server without closing sockets?

我們有一小組使用node.js的多人服務器,目前在高峰使用期間每分鍾提供大約一百萬條消息。 有沒有一種方法可以“優雅地”重新啟動服務器而不會導致套接字丟失? 基本上,我想知道處理重啟的最佳方法是什么,因為這通常會對玩家造成極大的破壞嗎?

使用redis或一些內存數據庫來存儲連接,以便即使服務器重新啟動后也可以輕松地重新連接,而不會丟失任何會話或連接。 如果適合您,請嘗試此。 另外請注意,重新啟動期間連接可能會斷開,但是由於具有持久性,您將非常容易地再次連接。 套接字

當進程退出時,操作系統會通過關閉它們來清理屬於它的所有套接字。 因此,無法簡單地重新啟動服務器並保留套接字連接。

在某些操作系統中,您可以將套接字的所有權從一個進程傳遞給另一個進程,因此從技術上講,創建一個臨時進程或以前存在的父進程可能是可行的,將套接字的所有權傳遞給另一個進程,然后重新啟動您的服務器,然后將所有權轉移回新啟動的進程。 我從未嘗試過(或聽說它已經完成),但聽起來可能是可行的。

以下是有關使用node.js中的child.send()將套接字傳輸到子進程的一些信息 似乎只能對net模塊創建的node.js套接字執行此操作,並且對此有一些注意事項,但有可能。

如果不是,通常的解決方法是讓客戶端在關閉連接時自動重新連接。 正確完成后,這對客戶端可能是相當透明的(服務器未運行時的瞬時時間除外)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM