3

我有一个播放应用程序,我正在使用正在做一些持续工作/监控的演员。

例如

class MyActor extends Actor {
    def act() { while(true) { /* work */ } }
}

在我的代码中,我只启动了这个演员一次。
我的问题是,每当 play 自动重建应用程序(由于源更改)时,它都会创建一个新的 Actor,但不会摆脱旧的 Actor。如果使用线程(包括守护线程)而不是参与者进行监视,则会发生完全相同的事情。

object除了重启手动应用程序(我可以在每次更改时自动重新启动应用程序)?

此外,是否有更好的后台监控模式(显然不会创建非结束线程)。

谢谢

4

1 回答 1

3

您可以定义一个全局对象来监听应用程序事件(必须在默认包中定义):

import play.api.GlobalSettings

object Global extends GlobalSettings {

  override def onStart(application: play.api.Application) {
    println("Starting actors")
    MyActorSystem
  }

  override def onStop(application: play.api.Application) {
    println("Stopping actors")
    MyActorSystem.system.shutdown()
  }
}

重新加载发生时会触发停止和启动事件。如果您使用的是 Play 的内部演员系统,我认为您可以使用它:

play.api.libs.concurrent.Akka.system.shutdown()
于 2013-08-10T21:50:54.103 回答