alive(port)
中的方法RemoteActor
不会将IP地址作为参数。
它在内部构造一个TcpService
对象,它通过调用Java InetAddress.getLocalHost().getHostAddress()
来确定IP地址,该{{1}}返回第一个可用接口的IP。
这会导致具有多个网络接口的计算机出现问题,因为它可能会返回错误的IP地址。
有没有办法解决这个问题。
感谢。
答案 0 :(得分: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提供了许多额外的功能,但也提供了效率和稳健性。如果查看他们的GitHub和Server类,您将看到主机实际上是从全局配置条目“hostname”中读取的。 有关如何操纵配置的详细指南here。您应该能够使用与上面类似的代码来找到正确的接口和地址。
希望有所帮助!