2013-06-25 38 views
0

我想創建一個定期輪詢器,輪詢每x毫秒。如何使用Play 2.0和Scala創建定期輪詢器

我要開始,並通過URL

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 
    } 
    } 

但是,這並未#牛逼的工作停止,演員只被調用一次,當我與

pollingActor開始輪詢! 「開始」

我在做什麼錯?我是否誤解演員中的循環?

回答

1

您可以在寵物用阿卡調度

Akka.system.scheduler.schedule(1 seconds, interval, tracker, Tick) 

here的工作的例子來自我。

1

我會先將您的演員轉換到阿卡。 Play已經建立在Akka之上,而scala actor API已被棄用,並且很快就會被移除。然後,您可以利用Akka ActorSystemScheduler來處理調度方面,讓演員本身只處理輪詢。重構演員可能看起來像這樣:

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") 

在這個例子中,poller將發送一個"poll"消息每100毫秒。如果您想停止投票,那麼您可以致電cancelcancellable參考文獻返回給schedule

相關問題