2009-01-30 71 views
1

與瀏覽器遊戲一樣。用戶構建建築物,並且爲特定日期/時間設置計時器以完成建築物併產生建築物。讓Rails在某個特定時間發生某些事情

我想像得到一個像deamon一樣的東西,但是如何工作?對我來說,紡紗+投票似乎不是要走的路。我看了async_observer,但是這很適合這樣的事情嗎?

回答

1

如果您只需要該玩家可以看到該事件,那麼該模型可以根據需要報告其更新狀態,我們完成了,繼續前進,沒有什麼可以在這裏看到的。

另一方面,如果任何人在計劃創建時都需要看到它,那麼問題會更加有趣。

我想說你需要兩件事。一個可以將時間事件放入其中的隊列(數據庫表格可以很好地完成)以及一個後臺進程,可以連續運行或重新啓動,這樣可以將計劃在上次執行後發生的事件(或者那些即將發生的事件,我想)和行動他們。

查看Rails wiki上的list of options,看來還沒有One True Solution。我們希望其中一個符合法案。

0

在某種程度上,它取決於您的前端有多少邏輯,以及您的模型有多少。如果你知道在發生什麼事情之前會花費多少時間,你可以保留前端的大部分邏輯。

我會用你的模型來確定事物的狀態,並且在特定的請求中你可以檢查它是否被構建。我不明白你爲什麼需要一個背景工作者。

+0

那麼一次可以有多個用戶和許多這些定時事件。我可以遍歷頁面請求中的所有以前的事件,但是這個答案給出了併發性問題(多個實例做同樣的事情),並且B.使得請求更慢。 – 2009-01-30 15:35:46

0

我會使用AJAX啓動一個定時器(請參閱Periodical Executor)以更新您的用戶界面。在模型方面,只需跟蹤建築物的created_at列,並且只允許在建築時間過後使用它。這樣,你不必每隔幾秒鐘就去一次你的數據庫,看看你的建築是否完成。

1

我剛剛爲我正在研究的PBBG做了這件事(大反派,你可以在MadGamesLab.com上看到正在進行的工作)。無論如何,我去了一個命令表,其中用戶命令每個生成一個條目和一個事件表,每個命令有一個或多個條目(鏈接回命令)。使用腳本/ runner運行輔助守護進程以使其開始定期輪詢事件表並運行時間已過的事件。

到目前爲止,它似乎工作得很好,除非我看到一些問題,當我投擲大量的用戶時,我不打算改變它。

相關問題