Сканирование для актеров Akka - PullRequest
1 голос
/ 23 ноября 2011

У меня есть узел, на котором могут работать несколько экземпляров сервера (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]})
  }

Мне интересно,Есть ли более идиоматический способ сделать это?Я не мог найти много об этом, хотя я думаю, что этот вариант использования довольно распространен.

1 Ответ

3 голосов
/ 23 ноября 2011

Звучит так, будто вы после скопления. До выпуска Akka 2.1 (со встроенной поддержкой кластеров) вы можете использовать что-то вроде ZooKeeper или JGroups или иным образом, чтобы узлы регистрировались при запуске и отменялись при их выходе (или по истечении времени ожидания)

...