2

我想构建一个在静态 IP 地址和端口上具有公共服务器的参与者系统。会有很多客户端知道服务器的地址。服务器不知道客户端的 IP 地址。

服务器的配置:

akka {
  actor {
    provider = "akka.remote.RemoteActorRefProvider"
  }
  remote {
    transport = "akka.remote.netty.NettyRemoteTransport"
    netty {
      hostname = "46.38.232.161"
      port = 2552
    }
  }
}

客户端配置:

akka {
  actor {
    provider = "akka.remote.RemoteActorRefProvider"
  }
  remote {
    transport = "akka.remote.netty.NettyRemoteTransport"
    netty {
      port = 2553
    }
  }
}

一个客户可能来自整个互联网。现在我想从客户端上的演员向服务器上的演员发送消息。服务器如何知道,在哪里发回他的消息?当我向ActorPath服务器发送 s 时,他会知道相应的客户端地址,这些不包含客户端的 IP 地址。

4

2 回答 2

1

Actor有一个方法被调用sender,可以在actor的receive方法中调用来获取对ActorRef发送当前消息的actor()的引用。有ActorRef一个ActorPathwhich 有一个RootActorPathwhich 有一个which 包含actor 所在Address的主机和端口。ActorSystem

于 2012-11-23T01:04:22.887 回答
1

akka.remote.netty.hostname属性可以在您的application.conf, 中设置为可访问的 IP 地址或可解析的名称,以防您想通过网络进行通信。实际上,当使用 Akka 时,您的“客户端”节点也将是服务器。

如果在应用程序启动时地址未知,请考虑 Akka 文档中的以下代码片段:

import akka.actor.ActorSystem
import com.typesafe.config.ConfigFactory

val customConf = ConfigFactory.parseString("""
  akka.actor.deployment {
    /my-service {
      router = round-robin
      nr-of-instances = 3
    }
  }
""")

// ConfigFactory.load sandwiches customConfig between default reference
// config and default overrides, and then resolves it.
val system = ActorSystem("MySystem", ConfigFactory.load(customConf))
于 2012-11-24T19:39:14.557 回答