2012-05-19 29 views
0

方法alive(port) in RemoteActor不採用IP地址作爲參數。Scala RemoteActor多個網絡接口

它在內部構造一個TcpService對象,該對象通過調用Java的InetAddress.getLocalHost().getHostAddress()來確定IP地址,該對象返回第一個可用接口的IP。

這對具有多個網絡接口的計算機造成問題,因爲它可能會返回錯誤的IP地址。

是否有任何可能的方法來解決這個問題。

謝謝。

回答

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類,你會發現主機實際上是從全局配置項「主機名」中讀取的。 有關如何操作配置的詳細指南請參見here。您應該能夠使用與上述類似的代碼來查找正確的界面和地址。

希望有幫助!