2012-10-23 30 views
2

我一直在寻找玩!框架,我有兴趣将我的一个项目转换为它。但是,该项目要求在用户操作时生成长时间运行的线程,但线程的结果不会通过普通的请求 - 响应方法返回给用户。相反,用户被重定向到一个监视他们已经开始的线程的页面。如何使用Play中的请求启动后台线程!框架?

所以,我想知道如何创建一个用户操作,创建一个线程,每当用户POST到/开始,但线程自动进入“背景”,用户收到一个响应,如“好”甚至是重定向,而不是线程的输出。

我也想要一定程度的控制线程;换句话说,我不只是想创建一个线程并让它运行。我想拥有某种全局参考点,以便用户可以在线程启动后停止线程(例如,通过访问/停止)。

+0

你看过阿卡吗?我认为这是第一次玩的公民2. – emt14

+0

我认为Akka只支持预定的工作。我不需要那些;我需要正确的线程,可以在用户与应用程序交互时执行操作。 – Rsaesha

+0

Akka基于Actor /消息模型。我想你可以通过编程方式启动这些踢球。如果你想避免并发性问题,那么我会远离自己的线程,这就是Akka所做的,而且从我的理解来看它是非常棒的! – emt14

回答

2

Play提供了可以在后台定期或在应用程序启动时运行的特殊Job,但我认为它不适合您。

就你而言,你可以简单地产生新的Thread或提交新的任务Executor,使用Java API和返回响应给用户。要停止Thread,您可以使用标准方法来处理循环和中断标志。这里没有什么特别的玩法框架,只是普通的java api。

+0

我不确定这是否奏效。我设置了一个简单的线程,等待10秒,启动它,然后返回一个ok()到页面。但是,当我运行应用程序时,请求在返回ok()之前仍会等待10秒钟。 我该如何使用Executor? – Rsaesha

+0

你用什么方法开始线程运行或启动?当新请求到达时用start方法产生新线程并返回给用户的响应。 Play没有什么特别之处。您可以使用控制台Java应用程序和主要方法 – Anton

+0

来试用它啊,我想我是用run()运行它的。它现在适用于start()。但是,我的问题的第二部分呢?我将在哪里存储对Thread对象的引用以便在请求之间进行控制? – Rsaesha

1

我不会生成新的Thread实例,而是使用Actor实例。它们是用于在后台执行非阻塞任务的更简单,更健壮的模型。

有关详细信息,请参阅PlayAkka文档。

相关问题