思考(四十四):一種全服郵件的實現方法
阿新 • • 發佈:2018-12-13
背景假設
- 考慮到大量玩家線上、以及更多未線上玩家
- 並假設邏輯服是可以多開的
本文術語
-
GMTool
能夠傳送
全服郵件
的客戶端 -
GMServer
給 GMTool 提供服務的伺服器程式
-
LogicServer
處理遊戲客戶端邏輯的伺服器程式
實現
下面分幾個步驟說明:
一、觸發 全服郵件
邏輯
有 2 種情況:
- LogicServer 執行中
- LogicServer 啟動時
二、全服郵件
傳送佇列
有 2 種情況:
- 離線玩家登入
- 線上玩家
三、處理 全服郵件
傳送佇列
單個玩家全服郵件傳送邏輯,實現如下:
四、全服郵件
傳送佇列處理頻率
處理頻率主要約束條件是 Redis 的處理能力。
部署 Redis 的機器效能、 Redis 的部署方式是否叢集化等,都會執行影響 處理頻率。
下面分析下單 Redis 情況:
假設:
- 每次處理 10 個玩家
- 每次處理時間間隔 25ms
- Redis 每秒處理 10w 次儲存操作
則:
- LogicServer 線上 4000 玩家, 10 秒傳送完畢
- 單 Redis 支援 100 萬玩家線上,需要開 250 臺 LogicServer,並在 10 秒傳送完畢