【问题标题】:Scanning for Akka Actors扫描 Akka Actor
【发布时间】:2011-11-23 18:49:24
【问题描述】:

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

我想知道,有没有更惯用的方法来完成这项工作?虽然我认为这个用例相当普遍,但我找不到太多关于此的内容。

【问题讨论】:

    标签: scala network-programming actor akka


    【解决方案1】:

    听起来你正在寻找一个集群。在 Akka 2.1 发布之前(内置集群支持),您可以使用 ZooKeeperJGroups 或其他方式让节点在启动时注册并在离开(或超时)时取消注册

    【讨论】:

    • 是的,基本上我是在动态设置集群,其中每个“集群”都有一个同步其对等节点的任意头节点。我希望留在 Scala 标准库和 Akka 框架内,以避免引入另一个依赖项。目前 Akka 中内置的主管应该会覆盖我,但我期待即将到来的集群支持。感谢您的信息。
    • 好吧,您可以通过一个您拨入并跟踪客户端的集合节点来临时处理它。分布式错误检测远非微不足道,这就是为什么我们将集群作为 2.1 的主要功能发布的原因
    猜你喜欢
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    • 2013-11-27
    相关资源
    最近更新 更多