2012-04-01 44 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