2012-04-01 57 views
1

我學習了Scala的Play 2.0框架,除了能夠處理請求之外,我還想在後臺運行一個連續的任務,就像一羣定時器一樣。並以某種方式能夠從請求 - 響應操作中訪問這些定時器,而不會遇到任何線程同步問題。我聽說過Play中的Jobs,並且Scala中有演員。然而,我在2.0中找不到有關喬布斯的任何信息,它們似乎已被Promises取代..但實際上,這並不像運行一個持久的後臺線程,我不確定Actors如何適應整個範例。玩2.0框架 - 主應用程序週期的持續線程?

基本上,我的問題是 - 在Play 2.0中獲得這種持久性的傳統方式是什麼?

回答

4

不完全正確,喬布斯並沒有被Promises取代,而是被scheduling to send messages to actors取代(請參閱「調度異步任務」)。

無論如何,演員似乎是爲你走的路。 Play 2.0使用Akka。實際上這很簡單。 Akka主頁有關於Actor是什麼以及你可以用它們做什麼的詳細解釋,但是你可以把Actor看作帶有郵箱的一些代碼(比如說一個函數)。您可以將郵件發送到郵箱,並且將爲正在等待郵件的每條郵件運行該功能。這可能僅僅是一個重複性工作的定期信號,或者是長期後臺任務的參考,告訴它需要更新什麼。

+0

好的,我已經閱讀了關於演員和時間安排的Play教程。演員的概念對我來說看起來簡單而合乎邏輯,在Erlang我也對他們有一些小的經驗,所以除了一件事情之外,一切似乎都很清楚。組織線程更新週期的首選方式是什麼?我是否必須使用調度程序簡單地向代表線程的Actor安排定期更新衝動?或者我從一個Actor開始一個線程,並在它的'run()'方法中組織循環? – noncom 2012-04-01 16:26:16

+1

如果您想安排工作來運行例如,不需要額外的線程。每30分鐘一次,只需調用'Akka.system.scheduler.schedule(0秒,30分鐘,testActor,「tick」)'就可以了。如果您需要基於事件的更新作業(例如,在用戶上傳後調整圖像的大小以備後用),請在完成作業時向演員發送消息:'myActor! myMessage'。 – Carsten 2012-04-01 16:38:58

+0

太好了,謝謝!這涵蓋了一切! – noncom 2012-04-01 16:42:14