4

を使用して接続しnew Socket("unit.domain.com", 100)unit.domain.comDNSレコードのAレコードに複数のIPアドレスがある場合。接続に失敗した場合、Javaはブラウザのようにリスト内の他のアドレスの1つに自動的に接続しますか?またはそれを手動で実装する必要がありますか?

4

1 に答える 1

5

いいえ!new Socket(String, int) を介してソケットを作成すると、そのような解決になります

addr = InetAddress.getByName(hostname);

これはのショートカットです

return InetAddress.getAllByName(host)[0];

アドレス解決は Socket c-tor で実行されます。

再接続 (フェイルオーバー) が必要な場合は、InetAddress.getAllByName(host) によって返された結果を使用し、ランダム化 (またはラウンドロビンを使用) して、必要なアドレスに接続します。

編集: また、何らかの障害が発生して接続する必要がある場合は、Socket クラスの connect メソッドをタイムアウト付きで使用することをお勧めします。また、*Nix では FD がリークする可能性があるため、失敗したソケット (および特にチャネル) も必ず閉じてください。

于 2011-01-10T18:39:20.640 に答える