使用Apache HttpClient,为什么我的连接超时不起作用?
时间:2020-03-06 14:42:42 来源:igfitidea点击:
我的httpclient实现有时在调用doGetConnection()时引发异常。但是,我有以下超时设置
_moHttpClient.setHttpConnectionFactoryTimeout(30000);
看起来我的超时几乎没有被接受。还有其他地方我需要设置超时以确保不会再次发生此行为
解决方案
HttpConnectionManagerParams cmparams = new HttpConnectionManagerParams(); cmparams.setSoTimeout(10000); cmparams.setTcpNoDelay(true); HttpConnectionManager manager = new SimpleHttpConnectionManager(); manager.setParams(cmparams); params = new HttpClientParams(); params.setSoTimeout(5000); client = new HttpClient(params, manager);
我不知道为什么要设置两个不同的SoTimeouts。也许我正在尝试找出哪个实际处于活动状态,因为使用它时我遇到了与我们相同的问题。
上面的代码现在处于我们所在位置的实时代码中,但是我不能说它是否有效是因为它是正确的,还是因为Providence对我微笑(并且另一端通常总是可用)。
cmparams.setSoTimeout(10000);
默认情况下,此选项适用于所有HttpClient。
params.setSoTimeout(5000);
这是针对特定的httpclient的。
我们会抛出什么异常?
别忘了我们有两个超时时间可以更改/检查。来自HttpConnectionParams
setConnectionTimeout() setSoTimeout()
因此,我们可以控制等待与服务器连接的时间,以及在超时之前对套接字进行的操作需要多长时间。