0

メソッドalive(port)inRemoteActorは IP アドレスをパラメーターとして取りません。

最初に使用可能なインターフェースの IP を返すTcpServiceJava を呼び出して IP アドレスを割り当てるオブジェクトを内部的に構築します。InetAddress.getLocalHost().getHostAddress()

これにより、間違った IP アドレスが返される可能性があるため、複数のネットワーク インターフェイスを持つマシンで問題が発生しています。

この問題を克服する方法はありますか。

ありがとう。

4

1 に答える 1

1

良い質問。それは、ソリューションにどれだけ投資したいかによって異なります。私は2つの方法を想像できます:

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) もう 1 つの (そしておそらくもっと簡単な) 方法は、デフォルトの実装をすべて一緒に使用することを避け、代わりに非常に人気のあるアクター フレームワークakkaを使用することです。Akka は多くの追加機能を提供するだけでなく、効率性と堅牢性も提供します。彼らのGitHubServerクラスを見ると、ホストが実際にはグローバル構成エントリ「ホスト名」から読み取られていることがわかります。構成を操作する方法に関する詳細なガイドは、こちらにあります。上記のようなコードを使用して、適切なインターフェイスとアドレスを見つけることができるはずです。

それが役立つことを願っています!

于 2012-06-03T15:27:22.343 に答える