扫描Akka演员

时间:2011-11-23 03:33:14

标签: scala network-programming actor akka

我有一个节点可能正在运行服务器的多个实例(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]})
  }

我想知道,有没有更惯用的方法来完成这项工作?我在这方面找不到多少,虽然我想这个用例相当普遍。

1 个答案:

答案 0 :(得分:3)

听起来像是在群集之后。在Akka 2.1发布之前(内置集群支持),您可以使用类似ZooKeeperJGroups的内容或其他方式在节点启动时注册,并在它们离开(或超时)时取消注册