【问题标题】:Java outgoing TCP connection failover based on multiple DNS results基于多个 DNS 结果的 Java 传出 TCP 连接故障转移
【发布时间】:2011-06-06 15:15:03
【问题描述】:

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

【问题讨论】:

    标签: java tcp connection dns failover


    【解决方案1】:

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

    addr = InetAddress.getByName(hostname);
    

    这是

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

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

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

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

    【讨论】:

    • 好的,我该问了。什么是 *Nix?
    • 它代表“unix alike”,在 linux/unix 上关闭套接字是两阶段操作,由于一些缺点,第二阶段可能无法完成并留下臭名昭著的 FD 泄漏,除非正确调用 close( ) 发生。所以不管connect()是否成功,一定要关闭任何SocketChannel(Socket)
    猜你喜欢
    • 2018-12-28
    • 2020-08-07
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    • 1970-01-01
    相关资源
    最近更新 更多