2012-07-31 84 views
0

我正在編寫一個撲克變體遊戲,並且需要ruby或rails來運行一個大循環來保持遊戲自動化。即:在Ruby或Rails中延遲函數調用

  • 每隔10秒檢查一次,以確定遊戲中有足夠的玩家;
  • 當有時,處理卡片,然後倒計時~45秒,在這之後會發生攤牌;
  • 在我的撲克變體中,有3個連續的對決 - 因此每個攤牌都需要緩慢發生,以便玩家知道發生了什麼事情:即5秒顯示手部的第一部分並宣佈該對決的贏家5秒第二次和5秒第三
  • 暫停從頂部手,幾秒鐘後
  • 啓動循環再次

我有一個快速瀏覽一下的delayed_job和resque,但它們看起來相當複雜爲了我想要做的事情。我還考慮過使用javascript/jquery循環來沿着循環推動服務器,但這看起來很不雅觀,因爲每個桌面上的潛在衆多玩家都會試圖推動循環,而不是服務器執行循環集中。

我錯過了一個相當簡單的功能,還是該深入研究delayed_job?

回答

0

你幾乎需要某種形式的守護進程,但你不一定需要任何庫。

您可以在某些模塊上將代碼編寫爲方法,並使用rails runner調用它。該方法可以執行一個包含sleep <seconds>的循環來執行代碼並等待。停止進程的簡單方法是讓它監視文件是否存在於/ tmp或其他文件中,但是也可以執行諸如寫入pid文件之類的操作,然後使用它的pid來終止進程。

+0

感謝您確認沒有內置的功能,我可以依靠。我最終使用了rufus-scheduler,它似乎是我需要的最乾淨的一個。 – 2012-08-01 02:07:08