方法alive(port)
in RemoteActor
不採用IP地址作爲參數。Scala RemoteActor多個網絡接口
它在內部構造一個TcpService
對象,該對象通過調用Java的InetAddress.getLocalHost().getHostAddress()
來確定IP地址,該對象返回第一個可用接口的IP。
這對具有多個網絡接口的計算機造成問題,因爲它可能會返回錯誤的IP地址。
是否有任何可能的方法來解決這個問題。
謝謝。
方法alive(port)
in RemoteActor
不採用IP地址作爲參數。Scala RemoteActor多個網絡接口
它在內部構造一個TcpService
對象,該對象通過調用Java的InetAddress.getLocalHost().getHostAddress()
來確定IP地址,該對象返回第一個可用接口的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類,你會發現主機實際上是從全局配置項「主機名」中讀取的。 有關如何操作配置的詳細指南請參見here。您應該能夠使用與上述類似的代碼來查找正確的界面和地址。
希望有幫助!