我有一個運行在節點後端的實時HTML5畫布遊戲。玩家通過Websocket(socket.io)連接。問題是有時我需要部署新的代碼(比如修補程序)並重新啓動服務器,但我不想斷開連接。如何分離實時遊戲架構
我的想法是將websocket服務器和應用程序服務器劃分爲可單獨部署的組件,並在中間添加消息隊列以將這兩個組件解耦。這樣,如果應用程序服務器重新啓動,那麼只有短暫的延遲,而消息聚集在一起,但沒有任何東西會丟失。這是一個好策略嗎?有其他選擇嗎?
我有一個運行在節點後端的實時HTML5畫布遊戲。玩家通過Websocket(socket.io)連接。問題是有時我需要部署新的代碼(比如修補程序)並重新啓動服務器,但我不想斷開連接。如何分離實時遊戲架構
我的想法是將websocket服務器和應用程序服務器劃分爲可單獨部署的組件,並在中間添加消息隊列以將這兩個組件解耦。這樣,如果應用程序服務器重新啓動,那麼只有短暫的延遲,而消息聚集在一起,但沒有任何東西會丟失。這是一個好策略嗎?有其他選擇嗎?
基於websocket的應用程序很有可能在沒有用戶注意的情況下重新啓動(my chat server for example就是這種情況)。
爲了做到這一點,解決方案是不要將websocket應用程序隔離並且不要重新啓動。事實上,這將是非常樂觀的(你確定你可以確保它的API永不改變?)。
一種解決方案是
「如果您的服務器沒有其他狀態,而不是客戶端之間的隊列」。我的應用程序目前實際上並沒有排隊。我的問題的一部分是我的問題是否表明使用隊列會有好處。 –
很難知道,因爲它是非常特定的應用程序。但是隊列很少是最好的解決方案(如果你在db中實現一個隊列,情況會更糟糕)。在我製作的基於websocket的遊戲平臺中,應用程序的狀態只是持續存在,並且可以被客戶查詢。遊戲移動是由websocket發送的,但是如果應用程序斷開連接,它只需查詢狀態(在db服務器端持久存儲)。 –
你不需要如此解耦:如果您只是讓隊列持久化(或者如果解耦它),則只需在斷開連接並詢問狀態時使瀏覽器重新連接即可。 –
不應在活動服務器上部署imho修補程序,如果修補程序打破其他一些行爲,該怎麼辦?在計劃好修補程序的正面行爲將其合併到生產之後,將開發服務器放到您想要的所有內容上是一個不錯的主意。玩家可以耐心等待5分鐘的停機時間,但如果生產更新需要更多時間,最終你會失去它們。 – Gntem
你給予賞金的事實,但不回覆評論或答案,如果你不在乎是令人不安的。你在期待什麼? –