作者:
Apache (阿帕契)
2021-02-20 23:36:401. Naive Multiple Timer
直觀,但是當玩家很多的時候,放上萬個Timer顯然並不實際
2. Queue
fn ConsumeHP(User user) {
...
if (user.hp < MAX_NATIVE_HP)
queue.push({user,time::now() + FIVE_MINUTES_MS});
}
fn ProduceHP() {
while(!queue.empty() && queue.front().second <= time::now()) {
queue.front().first.hp++;
queue.pop();
}
}
fn threadEntry() {
Timer timer = new Timer(
1000, // First delay
1000, // Routine delay
ProduceHP // timer callback
);
}
這樣就能用一個Timer 去loop
效能會不會爆掉就是另一回事 其實我猜幾萬人的話應該扛得住
3. Check When Change
這個比較難形容
簡單來說,客戶端這邊可以用Naive Timer去算顯示的體力
但是後端並不會即時更新
只有在消耗或非自然增加(道具、升級)
或是用戶端請求更新(登入、本地Timer callback)的時候才去更新目前的體力
這樣就可以減少計算量
實際上應該這種方案比較實際