У меня есть узел, на котором могут работать несколько экземпляров сервера (Akka Remote 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]})
}
Мне интересно,Есть ли более идиоматический способ сделать это?Я не мог найти много об этом, хотя я думаю, что этот вариант использования довольно распространен.