Scala RemoteActor多个网络接口

时间:2012-05-19 17:12:27

标签: scala actor remote-actors

alive(port)中的方法RemoteActor不会将IP地址作为参数。

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

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

有没有办法解决这个问题。

感谢。

1 个答案:

答案 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提供了许多额外的功能,但也提供了效率和稳健性。如果查看他们的GitHubServer类,您将看到主机实际上是从全局配置条目“hostname”中读取的。 有关如何操纵配置的详细指南here。您应该能够使用与上面类似的代码来找到正确的接口和地址。

希望有所帮助!