我有一个节点可能正在运行服务器的多个实例(Akka远程actor)。我希望客户能够扫描给定节点上的一系列端口,寻找实时服务器。
我在我的客户演员中写了这个方法:
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]})
}
我想知道,有没有更惯用的方法来完成这项工作?我在这方面找不到多少,虽然我想这个用例相当普遍。