我讓我的遊戲簡單,沒有crons。 當玩家想要的東西,需要時間,我剛剛更新了他的數據庫中的信息與結束這項工作的合適時間(列只是一個例子)
UPDATE player SET jobend = UNIX_TIMESTAMP() + (60*60*4) # ending in 4 hours
然後,每個頁面有大約剩餘時間的信息,我只是用這樣的:
SELECT (jobend - UNIX_TIMESTAMP()) AS jobremaining FROM player
我使用strftime格式正確的時間,我是顯示給用戶。 在剩餘時間爲負的情況下,工作完成。 由於用戶在連接時能夠完成某項工作,因此不需要進行絕對計數。
當玩家只是改變頁面或做別的事情時,我有一個功能,我只是檢查所有及時的事件,而用戶在線(所以捕捉任何負面的計時器),然後呈現與JavaScript的任何變化(我張貼的JavaScript計數器對於每一頁)
現在,如果你談論實時更新,cron是方式,但你確定你會需要它的遊戲嗎?我自己也問過這個問題,答案不是。
編輯
如果其他玩家看到buildings on schedule
頁面(假設一個頁)我在做相同的計算;如果某個特定玩家的時間剛剛變爲負值(無論其他玩家是否看到該頁面),我只需在建築物(在數據庫中進行所有更改)就給他獎勵,即使他的離線。這沒有什麼壞處,因爲反正他什麼都做不了。其他球員只會看到他有一座建築。這裏的關鍵是我執行所需的更新PHP代碼,不管玩家連接到遊戲;只要至少有一個玩家登錄,我正在執行一切的進度功能。 這聽起來並不那麼慢(通過使用訪問特定頁面的連接播放器更新所有播放器)。你只是有一個'工作'的表,並檢查當前時間的計時器。更像是一個獲取負面問題的單個查詢。
預定的cron工作怎麼樣? –
你可以隨時使用crons,但是如果你有很多玩家,你必須每分鐘運行一次cron,所以我不確定它是否有效。它可以比每次頁面加載手動檢查都更好。 – ascx
如果您想使用實時應用程序,請查看NodeJS。 –