gpt4 book ai didi

java - 抛出 java.net.UnknownHostException 时在哪里检查/设置超时?

转载 作者:行者123 更新时间:2023-11-30 11:32:33 25 4
gpt4 key购买 nike

抛出 java.net.UnknownHostException 时在哪里检查/设置超时?

有时我的代码会尝试连接到一个不存在的位置并抛出 java.net.UnknownHostException,这在我的应用程序中是可接受的情况。

我遇到的问题是在抛出异常之前大约需要 20 秒,这会减慢整个应用程序的速度。

网络服务器版本为Tomcat 7.0.37。我已尝试在 server.xml 中为以下连接器更改超时设置(至 2 秒):

Connector port="8009" protocol="AJP/1.3" redirectPort="8443" connectionTimeout="2000"
Connector port="8080" protocol="HTTP/1.1" connectionTimeout="2000" redirectPort="8443"

当我使用 HttpURLConnection 时,我希望端口 8080 的连接超时设置生效,但它似乎不是真的。

我还尝试在代码中设置超时:

HttpURLConnection connection = (HttpURLConnection)url.openConnection();  
connection.setConnectTimeout(1000);
Reader reader= new InputStreamReader((InputStream) connection.getContent());

但这也不起作用,有什么想法吗?我错过了什么吗?

最佳答案

时间可能花在了在 DNS 中查找主机上,在您的情况下,这似乎在尝试查找无法找到的主机时超时。如果您连接的 DNS 服务器将请求转发到另一台 DNS 服务器,但未在合理的时间内收到回复,可能是因为配置不当,就会发生这种情况。

您可以通过使 DNS 查找超时时间提前,在操作系统级别解决此问题;例如,在 Linux 中,您可以将 options timeout:2 添加到 /etc/resolv.conf 以使 DNS 查找在 2 秒内超时而不是默认超时。在 Windows 上你必须 edit a registry setting .

或者,您可以通过 using a thread for the name resolution 在您的程序中解决此问题.如果线程没有在您指定的超时时间内返回,您假设名称解析将抛出 UnknownHostException

第三种选择是使用不同的、性能更好的 DNS 服务器,例如由 Google 在 8.8.8.8 和 4.4.4.4 维护的服务器。

关于java - 抛出 java.net.UnknownHostException 时在哪里检查/设置超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16605784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com