[英]How to find a parent actor in scala akka
我正在使用Scala Akka演员模型。 我有一个父演员创建n个子演员。 儿童演员首先互相交谈,然后将答案报告给主要演员。 但是我无法使其适用于报告部分。 代码结构如下:
class Master(n:Int) extends Actor{
val system =ActorSystem("mysystem")
for(i <- 1 to n){
val child=system.actorOf(Props(new Node),name=i.toString)
}
... code let child actor talk with each other ...
def receive={
case _=>"received"
}
}
class Node extends Actor{
def receive={
case => ... some code talking with each other...
var master=context.actorSelection("../Master")
master ! "talk back to master"
}
}
def main() {
val Master=system.actorOf(Props(new Master(10)),name="Master")
}
让主服务器将其自引用传递给节点。 相关更改的行是:
... // In Master:
val child=context.actorOf(Props(new Node(self)),name=i.toString)
...
... // Definition of Node:
class Node(master: ActorRef) extends Actor{
...
//var master=context.actorSelection("../Master") - this line no longer required.
... //etc.
有什么理由为什么要创建新的ActorSystem? 通常,它仅创建一次,但是您已经有一个actor,这意味着您已经拥有一个系统,无需创建两次。 ActorSystem的重量特别重,它会分配线程,读取调度程序的配置,远程功能,地址等。除非有充分的理由,否则不要创建新的线程。
我建议删除ActorSystem的创建,在创建子actor时使用context
而不是system
。 这样,您可以在Node
使用context.parent
来获得Master
,因为它是您所有孩子的主管。
此外,查询../Master
选择一个同级而不是父级。 您可能想要..
结果与context.parent
完全相同,但是context.parent
应该更快
尝试
val master = context.actorSelection("/user/Master")
master ! "talk back to master"
你也可能想看看这个条目的文件中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.