Java HttpUrlConnection.getInputStream()延迟

时间:2015-04-15 09:24:59

标签: java linux windows network-programming

我的行为与HttpURLConnection getInputStream() has one second delay中描述的非常相似:在Java中获取http连接的InputStream导致延迟至少500ms。 InputStreams已正确关闭。使用apache httpclient实现也可以解决问题。不幸的是,替换不适合我的每个用例。

此外,延迟不会显示在每个设置中。我到目前为止的观察结果如下:

  • 使用httpclient库就像魅力一样
  • 在服务器端使用Windows Server 2012 R2不会导致W7 Professional和W7 Enterprise
  • 的延迟
  • 客户端的Java版本无关紧要(32bit / 64bit,7/8)
  • 在客户端使用Windows 7 Enterprise 或Linux就像魅力一样
  • 在客户端使用Windows 7 Professional ,主机端的Linux框导致(至少)500ms延迟

此外,在其他地方批评服务器端的Linux并不是解决方案,使用Windows 7专业版不会出现问题。

我使用wireshark监控网络流量,发现差异没有成功:在完全收到响应后,客户端出现延迟。

最后,问题:Windows 7 Professional的(网络堆栈)中是否存在导致此行为的限制?是否可以调整Windows设置,以便不会发生延迟?

2 个答案:

答案 0 :(得分:3)

您需要了解在您调用以下之一之前不会创建TCP连接:

  • getOutputStream()
  • getInputStream()
  • getErrorStream()
  • getResponseCode()

因此,您看到的延迟是TCP握手延迟。你的代码中没有什么可以做的。

答案 1 :(得分:0)

老实说,我忘了这个问题,但几周之后就解决了,我想提供背景。

问题是客户端错误配置的反病毒程序(avira)。该扫描程序监视典型端口80,443和8080上的http流量,增加了客户端的延迟。

在Windows服务器上运行的软件的服务器端配置为侦听防病毒程序完全忽略的端口9090。

因此解决方案是告诉反病毒程序不扫描http流量。