基于多个 DNS 结果的 Java 传出 TCP 连接故障转移

标签 java tcp connection dns failover

如果我使用 new Socket("unit.domain.com", 100) 建立连接并且 unit.domain.com DNS 记录在A记录..在连接失败的情况下,Java是否像浏览器一样自动连接到列表中的其他地址之一?还是必须手动实现?

最佳答案

不! 通过 new Socket(String, int) 创建套接字会导致这样的解析

addr = InetAddress.getByName(hostname);

这是

的快捷方式
return InetAddress.getAllByName(host)[0];

地址解析在Socket c-tor中进行。

如果您必须重新连接(故障转移),请使用 InetAddress.getAllByName(host) 返回的结果,随机化(或使用循环法)并连接到必要的地址。

编辑:另外,如果您需要连接一些可能出现的故障,最好使用带有超时的 Socket 类的连接方法。 另外确保关闭甚至失败的套接字(尤其是 channel ),因为它们可能会在 *Nix 上泄漏 FD。

关于基于多个 DNS 结果的 Java 传出 TCP 连接故障转移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4648803/

相关文章:

java - Java并发中什么时候使用公平模式?

network-programming - 当服务器接受 TCP 连接时端口是否改变?

sockets - TcpSocket 监听 Firefox 插件

mysql - 设计您自己的 MySQL 或 PostgreSQL 连接?

google-chrome - WebRTC 连接 - 同时 STUN 和 TURN?

JavaScript/破折号 : check for internet connection

java - 端点不可达时的Kubernetes启动探针

java - 我的简单二维数组存在问题

java - 双击退出应用程序时出现问题

java - 防止服务器在客户端(golang)服务器(Java)应用程序中终止