2012-04-01 13 views
1

私はScala用のPlay 2.0フレームワークを学習していますが、リクエストを処理できるだけでなく、たくさんのタイマーのようにバックグラウンドで連続したタスクを実行したいと思います。そして、何らかの理由で、スレッド同期の問題を起こすことなく、要求 - 応答アクションからそれらのタイマーにアクセスできるようになります。 PlayのJobsについて聞いたことがあり、Scalaの俳優もいます。しかし、私は2.0のJobsに関する情報を見つけることができません。彼らはPromises ..に置き換えられているようですが、実際はこれは永続的なバックグラウンドスレッドを実行するようなものではなく、Actorsが全体のパラダイムにどのように適合するかはわかりません。Play 2.0フレームワーク - メインアプリケーションサイクルの永続スレッド?

私の質問は、Play 2.0でこの種の永続性を得る伝統的な方法です。

答えて

4

ジョブが約束で置き換えられるのではなく、scheduling to send messages to actors(「非同期タスクのスケジュール設定」を参照)によって置き換えられました。

とにかく、俳優はあなたのために行く方法のようです。 Play 2.0はそのためにAkkaを使用します。それは実際にはとても単純です。 Akkaのホームページには、アクターのしくみとその操作についての詳細な説明がありますが、アクターをメールボックスのあるコード(たとえば、関数)と考えることができます。メールボックスにメッセージを送信すると、そのメッセージを待っている各メッセージに対して機能が実行されます。これは定期的な仕事のためのちょうど周期的なシグナルか、更新する必要があることを伝える長いバックグラウンドタスクの参照です。

+0

私は俳優とスケジューリングに関するプレイチュートリアルを読んでいます。アクターのコンセプトは私にとっては単純で論理的ですが、私もアーランで少し経験がありますので、1つを除いてすべてがわかります。スレッド更新サイクルを構成する好ましい方法は何ですか?スケジューラを使用して、スレッドを表すActorへの定期的な更新インパルスをスケジュールするだけですか?あるいは、私はActorからスレッドを開始し、 'run()'メソッドでそのサイクルを整理するのですか? – noncom

+1

実行するジョブをスケジュールする場合は、余分なスレッドは必要ありません。 30分ごとに 'Akka.system.scheduler.schedule(0秒、30分、testActor、" tick ")を呼び出して、それを行います。イベントベースの更新ジョブが必要な場合(たとえば、ユーザーがアップロードした後で使用するためにイメージのサイズを変更するなど)、ジョブを完了する必要があるときに、アクターにメッセージを送信します。 'myActor! myMessage'。 – Carsten

+0

すばらしい、ありがとう!それはすべてをカバーしています! – noncom

関連する問題