2017-07-17 74 views
-2

我想爲我的學習做一個基於網絡的遊戲。小時獎勵遊戲

遊戲很簡單:註冊後,你有$ 100,你可以買到讓我們說一棵樹,這棵樹會給你每小時10個蘋果,你可以賣一個蘋果1個$

我的問題是:我如何讓這棵樹每小時減少10個蘋果?我是否需要編寫另一個連接到數據庫並更新所有內容的C#控制檯程序(又名cronjob)?抓住用戶,讓他們的樹木,每小時給他們蘋果?我已經嘗試過這種方式,但它是一個性能問題

我試圖做到這一點,填補我的數據庫與虛擬1000用戶和每個用戶有10000棵樹(所以10000000樹總數),但我的C#程序(所謂的「被稱爲CronJob)正在超過5分鐘,以獎勵與蘋果都是假的玩家

我使用實體框架和foreach循環抓住每一個球員,算上他們的樹,然後把蘋果給他們,並保存數據庫的變化

+1

這種工作應該由db不在代碼中。大多數當前的RDBMS都有某種調度器。 –

+0

@ BarryO'Kane如何在Microsoft SQL Server中執行此操作? – AlekPsk

+1

創建一個存儲過程來更新適當的數據。然後讓SQL Server代理每隔一小時啓動一次SP。有關代理的信息,請參閱此信息https://msdn.microsoft.com/en-us/library/ms191439(v=sql.105).aspx –

回答

0

第一,如果向您的服務器發送請求是任何人都可以看到Apple計數更新的唯一方式,那麼我認爲在下一次請求之前沒有必要進行更新。您可以存儲latest_apple_drop_datetime,並根據請求計算蘋果被丟棄的次數以及最近一次丟棄的次數。這樣你就不需要任何cronjob。接下來,玩家是否會看到其他玩家的活動?如果沒有,你只需要處理請求玩家的樹木。最後,考慮在單個UPDATE語句中實現所有更新(我假設您使用的是SQL數據庫),而不會在代碼中出現任何循環,讓數據庫本身優化性能

+0

嗨,我希望每個人都能看到其他玩家的蘋果和其他東西,所以我認爲需要cronjob ..謝謝你的信息 – AlekPsk