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