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