使用游戏框架安排工作

时间:2017-05-03 07:18:14

标签: scala playframework

我的项目使用游戏框架2.3,需要每10分钟计算一次市场上列出的用户物品的实时价格(物品的价格根据销售类型的数量而变化)股)。我用演员这样做。但是,我有一个问题

如何在项目启动时启动作业,我还可以在代码中停止作业?

 Akka.system.scheduler.schedule(0.microseconds, 10.minutes, tickActor, "job")

package job.scheduledJobs

import akka.actor.Actor


class JobModule extends Actor {
   override def preStart() {
   println("makeRealTimePrice Job start!!")
}

override def receive: Receive = {
    case "job" =>
    //calculate price
    case _ => Unit
}
}


class TradingHandler(override implicit val env: 
RuntimeEnvironment[SystemUser]) extends 
securesocial.core.SecureSocial[SystemUser] with CookieLang {
def job() = Action {
    implicit request =>
       val tickActor = Akka.system.actorOf(Props(new JobModule))
       val cancellable1 = Akka.system.scheduler.schedule(0.microseconds, 10.minutes, tickActor, "job")
      Ok("success")
    }
 }

2 个答案:

答案 0 :(得分:0)

我认为您正在寻找the Global object,其中您可以挂钩应用程序启动和停止事件以触发事物。根据我的理解,您需要在Global中包含存储Cancellable的值,而onStop回调可以在应用程序停止时取消它。

答案 1 :(得分:0)

在我看来,你有两种可能性:

  • 使用web socket - 因此您只需为每个用户实例化一个Actor并为每个actor运行调度程序。
  • 让你的控制器成为单身人士并在该单身人士中实例化演员。

Akka演员创作起来很便宜,所以我相信你应该为每个客户实例化一个演员而不是所有客户都有一个演员。