在随机端口上选择远程actor

时间:2013-02-04 12:09:42

标签: scala networking port actor remoteobject

在Scala中,如果我使用alive(0)注册远程actor,则actor会在随机端口注册。 我可以像这样注册:在act方法中注册('fooParActor,self)。

现在,在主/服务器端,我可以通过提供端口来选择一个actor。我是否需要手动扫描端口才能使用随机端口?

我试图解决的问题是在节点上创建n个actor,然后在主/服务器程序中选择它们,例如在节点x上启动10个从站,并获取节点y上的10个远程actor列表。

这是怎么做到的?

2 个答案:

答案 0 :(得分:1)

没有必要为演员注册各种端口。相反,你需要一个端口用于整个actor系统 - 更确切地说是akka内核(服务器也需要知道)。有关所有这些内容的详细信息,请参阅文档的this page

为了选择一个远程actor,你可以通过它在远程actor系统中的路径查找它,类似于这样:

context.actorFor("akka://actorSystemName@10.0.0.1:2552/user/someActorName/1")

在这种情况下,您可以创建n演员作为someActorName演员的子节点,并为其指定1n的名称(这样您就可以获得其他人通过.../someActorName/2.../someActorName/3等等。

这里根本不需要随机化任何东西,并且考虑到你如何描述问题,也没有必要随机化。你只需启动10个演员并从1到10编号。任何随机数都会使事情变得不必要。

至于真正的随机端口,我只能同意sourcedelica。您需要一个固定端口来传递随机端口或其他一些通信方式。如果有人由于随机端口而不知道在哪里进行通信,则根本无效。

答案 1 :(得分:0)

您需要至少有一个具有众所周知端口的ActorSystem。然后其他ActorSystems可以使用端口0让Akka分配一个随机端口。奴隶ActorSystems将让演员在Master上注册演员,以便知道所有远程系统。

如果你绝对需要让你的主人使用一个随机端口,它需要在带外传送它的端口(使用共享文件系统或数据库)。