我有一个节点,它可能正在运行服务器的多个实例(Akka远程参与者)。我希望客户端能够扫描给定节点上的一系列端口,以查找活动服务器。
我在我的客户执行元中编写了这个方法:
private def scanHost(serverHost: String) = {
val initialPort = 36627
val portsToScan = (initialPort until initialPort + 32).toList
val tries = portsToScan map {
port ⇒ remote.actorFor("EnMAS-service", serverHost, port) ? Discovery
}
val replies = tries filter { future ⇒ {
try {
future.get match {
case reply: DiscoveryReply ⇒ true
case _ ⇒ false
}
}
catch { case _ ⇒ false }
}}
ClientManager.ScanResult(replies map {_.get.asInstanceOf[DiscoveryReply]})
}我想知道,有没有更地道的方法来完成这件事?我在这方面找不到太多,尽管我认为这种用例相当常见。
发布于 2011-11-23 18:49:25
听起来你在找一群人。在Akka2.1发布(具有内置集群支持)之前,您可以使用ZooKeeper或JGroups等工具让节点在启动时注册,在离开时取消注册(或超时)
https://stackoverflow.com/questions/8236990
复制相似问题