如何使用Play 2.0和Scala创建周期轮询器
我想创建一个周期轮询器,它每隔x毫秒轮询一次 我想通过URL启动和停止它如何使用Play 2.0和Scala创建周期轮询器,scala,playframework,playframework-2.0,actor,Scala,Playframework,Playframework 2.0,Actor,我想创建一个周期轮询器,它每隔x毫秒轮询一次 我想通过URL启动和停止它 val pollingActor = actor { var loop = true loopWhile(loop) { react { case "Stop" => { Console.println("Poller Stopping") loop = false exit } c
val pollingActor = actor {
var loop = true
loopWhile(loop) {
react {
case "Stop" => {
Console.println("Poller Stopping")
loop = false
exit
}
case "Start" => {
Console.println("Poller Starting")
loop = true
}
}
pollMyResults() // this is my poller
}
}
但是,这不起作用,当我开始调查时,演员只会接到一次电话
民意调查员!“开始”
我做错了什么?我弄错了演员的循环了吗 我会先把你的演员换成阿卡。Play已经建立在Akka之上,scala actor API已经被弃用,不久将被删除。然后,您可以利用Akka
actor系统
调度器
来处理调度方面,让actor自己只处理轮询。重构的参与者可能如下所示:
import akka.actor._
class PollingActor extends Actor{
def receive = {
case "poll" =>
//do polling work here
}
}
然后在参与者之外安排它的执行。您所需要的只是对运行在以下平台上的ActorSystem
的引用:
import scala.concurrent.duration._
val poller = system.actorOf(Props[PollingActor], "poller")
val cancellable = system.scheduler.schedule(0 milliseconds, 100 milliseconds, poller, "poll")
在本例中,
轮询器
将每隔100毫秒发送一条“poll”
消息。如果要停止轮询,则可以在调用计划
返回的cancelable
引用上调用cancel
您可以使用Akka调度程序
Akka.system.scheduler.schedule(1 seconds, interval, tracker, Tick)
请参阅“我的宠物”中的工作示例