0

方法alive(port)inRemoteActor不以 IP 地址为参数。

它在内部构造一个TcpService对象,该对象通过调用InetAddress.getLocalHost().getHostAddress()返回第一个可用接口的 IP 的 Java 来分配 IP 地址。

这会导致具有多个网络接口的机器出现问题,因为它可能会返回错误的 IP 地址。

有没有办法克服这个问题。

谢谢。

4

1 回答 1

1

好问题。这取决于您想在解决方案上投资多少。我可以想象两种方式:

1)更改默认实现的第一种方法是自己编写更好的东西。不过这并不难,因为远程演员库的所有代码都可以在GitHub上找到。

我的建议是重新实现TcpSerice类的部分内容,尤其是第 73 行,如下所示:

private val internalNode = {
    val interfaces = NetworkInterface.getNetworkInterfaces()
    val interface  = ... // find the right interface here
    val addresses  = interface.getInetAddresses()
    val address    = ... // find the right address here
    new Node(address, port)
}

如果您想添加或更改其他内容,此方法还允许您自定义其他内容。

2)另一种(可能更简单)的方法是避免一起使用默认实现,而是使用非常流行的actor-framework akka。Akka 提供了大量的附加功能,但也提供了效率和健壮性。如果您查看他们的GitHubServer类,您会发现主机实际上是从全局配置条目“主机名”中读取的。此处提供了有关如何操作配置的详细指南。您应该能够使用与上述类似的代码来找到正确的接口和地址。

希望有帮助!

于 2012-06-03T15:27:22.343 回答