养成类手游数据逻辑
以COC為例:
1) 服務器端時間戳; 用戶客戶端每次登陸都同步該時間戳
2) 服務端為每個用戶的數據維護一個狀態圖; 客戶端在時刻 t1 登陸時, 服務端計算該狀態圖到 t1 時刻的新狀態圖, 將該新狀態圖發送給客戶端。 服務端為該用戶啟動保活定時器, 比如45秒。 客戶端在該狀態圖的基礎之上, 接收到用戶操作命令時、在客戶端實時更新狀態、但是定時30秒、或者遇到某些重要操作時,將此前的操作命令序列發送到服務端,服務端收到后計算,計算結果肯定是完全一致的。 用戶t2時刻下線時,服務端計算到t2時刻的狀態、存儲。 用戶t3時刻上線時, 服務端計算t2->t3新的狀態圖返回給客戶端。 每次登陸過程就是重復這個步驟。
如果保活失敗,則會丟失用戶在一段時間內的操作。
這樣好處是服務端的網絡并發大大降低、后臺的數據io壓力也大大降低, 這樣的數據并發, 甚至可以完全不用數據庫、直接使用各種緩存系統的failover+存儲。
第2個是我想表達的主要東西; 這樣能降低網絡并發、后臺io并發, 能夠支撐的用戶將提高幾十倍!!!
總結
- 上一篇: Boost.python 编译和使用
- 下一篇: 搭建 coreseek sphinx