我正在開發一個網頁遊戲(js php mysql),其中一個點擊一個按鈕開始一個需要時間完成的動作(比方說10個小時),當它完成時,一些點被添加到該玩家的總數中。問題在於即使玩家在動作完成時不在線也需要添加這些點數。例如,我需要更新排名或發送給玩家的電子郵件。如何在一定的時間後採取行動(不同的用戶之間)?
我以爲關於一個cron作業不斷檢查結束行爲,但我認爲這會殺死資源(有時會檢查數千名玩家的行爲)。
是否有更好的解決方案來解決這個問題?
感謝您的關注!
我正在開發一個網頁遊戲(js php mysql),其中一個點擊一個按鈕開始一個需要時間完成的動作(比方說10個小時),當它完成時,一些點被添加到該玩家的總數中。問題在於即使玩家在動作完成時不在線也需要添加這些點數。例如,我需要更新排名或發送給玩家的電子郵件。如何在一定的時間後採取行動(不同的用戶之間)?
我以爲關於一個cron作業不斷檢查結束行爲,但我認爲這會殺死資源(有時會檢查數千名玩家的行爲)。
是否有更好的解決方案來解決這個問題?
感謝您的關注!
克朗是完美的。你可以在存儲過程中編寫你的任務,然後讓cron運行一個SQL腳本來調用存儲過程來更新你的播放器的記錄。數據庫旨在有效地處理數以千萬計的信息,所以我不認爲它會殺死系統資源的想法是有效的,除非你的主機系統已經真的受到了限制。
如果您想避免作弊,您需要在服務器上進行檢查。如果在客戶端的Javascript中發生「等待」,則可以輕鬆地減少剩餘時間。
因此,您需要將作業發送到服務器(假定其對時鐘修改是安全的),服務器將確定結束時間戳。你可以將你的工作存儲在隊列中。
如果您只需要用戶自己提供此信息,則可以在用戶登錄時查看隊列,否則每分鐘運行一次cron作業。此作業將標記當其時間戳過去時完成的所有作業(並將其從數據庫中刪除)。
如果您需要更精確的檢查,您需要提出一種更經常執行此操作的替代服務器端解決方案(例如,每隔幾秒鐘簡單程序輪詢數據庫)。
聽起來像一個cron工作正是你所需要的。 – 2012-06-05 21:40:49
我討厭用大量不必要的輪詢來使服務器超載。但是,所有考慮事項,服務器端「cron」工作可能是你最好的選擇。恕我直言... – paulsm4