方法alive(port)
inRemoteActor
不以 IP 地址为参数。
它在内部构造一个TcpService
对象,该对象通过调用InetAddress.getLocalHost().getHostAddress()
返回第一个可用接口的 IP 的 Java 来分配 IP 地址。
这会导致具有多个网络接口的机器出现问题,因为它可能会返回错误的 IP 地址。
有没有办法克服这个问题。
谢谢。
方法alive(port)
inRemoteActor
不以 IP 地址为参数。
它在内部构造一个TcpService
对象,该对象通过调用InetAddress.getLocalHost().getHostAddress()
返回第一个可用接口的 IP 的 Java 来分配 IP 地址。
这会导致具有多个网络接口的机器出现问题,因为它可能会返回错误的 IP 地址。
有没有办法克服这个问题。
谢谢。
好问题。这取决于您想在解决方案上投资多少。我可以想象两种方式:
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 提供了大量的附加功能,但也提供了效率和健壮性。如果您查看他们的GitHub和Server类,您会发现主机实际上是从全局配置条目“主机名”中读取的。此处提供了有关如何操作配置的详细指南。您应该能够使用与上述类似的代码来找到正确的接口和地址。
希望有帮助!