4
new Socket("unit.domain.com", 100)
とunit.domain.com
を使用して接続すると、Aレコードに複数のIPアドレスがあります。接続に失敗した場合、Javaは自動的にブラウザのようなリストの他のアドレスは?それとも手動で実装する必要がありますか?複数のDNS結果に基づくJava発信TCP接続フェイルオーバー
new Socket("unit.domain.com", 100)
とunit.domain.com
を使用して接続すると、Aレコードに複数のIPアドレスがあります。接続に失敗した場合、Javaは自動的にブラウザのようなリストの他のアドレスは?それとも手動で実装する必要がありますか?複数のDNS結果に基づくJava発信TCP接続フェイルオーバー
いいえ! アドレス解決がソケットC-TORに行われる
return InetAddress.getAllByName(host)[0];
のショートカットである
addr = InetAddress.getByName(hostname);
ような解決に新たなソケット(文字列、整数)の結果を介してソケットを作成します。
InetAddress.getAllByName(ホスト)によって返された結果を使用して再接続(フェイルオーバー)する必要がある場合は、ランダム化(またはラウンドロビンを使用)し、必要なアドレスに接続します。
編集:可能性のある障害に接続する必要がある場合は、Socketクラスのconnectメソッドとタイムアウトを使用する方がよいでしょう。 また、は、* NixでFDがリークする可能性があるため、失敗したソケット(および特にチャネル)を閉じてください。
OK、それは私が尋ねる時間です。 *ニックスは何ですか? –
これは "unix alike"の略で、linux/unix上のクローズソケットは2フェーズ操作であり、いくつかの欠点があるため、close()の適切な呼び出しが行われない限り、第2フェーズは完了せず、したがって、connect()が成功するかどうかに関係なく、SocketChannel(Socket)を閉じるようにしてください – bestsss