2012-10-23 28 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文檔。

相關問題