我有两个Tomcat服务器需要维持持久连接以减少SSL握手.一台服务器(代理)位于DMZ中,而另一台服务器安全地位于另一台防火墙后面.代理基本上只运行一个简单的servlet,在将请求转发到安全机器之前进行一些健全性检查.在初始请求中,机器在执行实际工作之前交换证书.因此,我希望在几分钟的超时时间内保持持久连接.
要与安全服务器通信,代理上的servlet使用HttpsUrlConnection.我已经设置了WireShark,我注意到无论keepAliveTimeout我在安全机器上为连接器设置了什么值,TCP连接在大约5或10秒后关闭.这个数字似乎与我所读到的是默认超时以及Java如何处理HTTP Keep-Alive.此链接说明Java Keep-Alive如果服务器发送超时则表示超时,否则在关闭连接之前使用5秒(直接连接)或10秒(代理连接).
我想弄清楚的是如何强制Tomcat发送Keep-Alive标头.不Connection: Keep-Alive,但是Keep-Alive: timeout=x.
我已经尝试过Apache HTTP服务器并修改keepAliveTimeouthttpd.conf确实会导致Keep-Alive标头更改其超时值.此外,Java确实遵守此超时.
更新(12/23/11):在运行了几个实验之后,我尝试使用Apache的HttpClient(3.1)而不是使用Apache的HttpClient(3.1)来编写一些快速而脏的代码HttpsUrlConnection.看来HttpClient在设置为使用Keep-Alive时,只是等待服务器关闭连接.我不知道它会等多久.我正在拍摄以保持HTTP连接活动3到5分钟.