2013-09-30 75 views
0

我是新来的演员,我想了解如何正确链接演员。我已阅读Ask: Send-And-Receive-Future文档部分。孩子演员气泡应该回复给其父母吗?

Here是我做到了,现在

case class Message1(text : String) 

class RootActor extends Actor { 
    def receive: Actor.Receive = { 
    case Message1(message) => { 
     (context.actorOf(Props(new TestActor1)) ? message)(5.seconds) pipeTo sender 
    } 
    } 
} 

class TestActor1 extends Actor { 
    def receive: Actor.Receive = { 
    case message : String => { 
     sender ! (message + " TestActor1") 
    } 
    } 
} 

object Test { 
    def main(args: Array[String]) { 
    println("Start!") 

    implicit val system = ActorSystem() 
    val rootActor = system.actorOf(Props(new RootActor)) 

    for (reply1 <- (rootActor ? Message1("Begin"))(5.seconds).mapTo[String]) 
     println(reply1) 
    } 
} 

所以我手动中继响应。但是不应该自动从孩子演员回复自己的父母?这是正确的方式吗?

另外我很担心,在手动的冒泡回复方式中,我使用ask这需要超时。但是,如果某个小孩演员需要更多时间来完成自己的工作,但是当我向根节点发送消息时,我受限于一个超时值?在我看来,在整个链中保持适当的超时非常麻烦。

我该如何简化它?

回答

5

只需使用forward代替。这就是它的目的。使用它像这样:

context.actorOf(Props(new TestActor1)).forward(message) 
+0

真棒!谢谢! – expert