问题描述
server用的是jetty,client用apache的commons-httpclient来执行method 。 目前我知道了 用 method.setRequestHeader("Connection" , "Keep-Alive" or "close") 来控制是否保持连接。 现在没弄懂的地方: 在保持连接的情况下,如何设置自动断开的时间? 比如, 我要设置keep alive 1分钟,如果这期间没有数据的传输,那么就断开连接。 请问该怎么设置? request里设置,还是jetty需要什么改配置?
解决方案
可以在jetty里面设的org.mortbay.jetty.nio.SelectChannelConnector#setMaxIdleTime()方法就是设socket通信的过期时间javaDoc是这样的:Description copied from class: AbstractConnector Set the maximum Idle time for a connection, which roughly translates to the Socket.setSoTimeout(int) call, although with NIO implementations other mechanisms may be used to implement the timeout. The max idle time is applied:When waiting for a new request to be received on a connection When reading the headers and content of a request When writing the headers and content of a response Jetty interprets this value as the maximum time between some progress being made on the connection. So if a single byte is read or written, then the timeout (if implemented by jetty) is reset. However, in many instances, the reading/writing is delegated to the JVM, and the semantic is more strictly enforced as the maximum time a single read/write operation can take. Note, that as Jetty supports writes of memory mapped file buffers, then a write may take many 10s of seconds for large content written to a slow device. Previously, Jetty supported separate idle timeouts and IO operation timeouts, however the expense of changing the value of soTimeout was significant, so these timeouts were merged. With the advent of NIO, it may be possible to again differentiate these values (if there is demand). 所以只需要在xml配置文件里面设定这个值就可以了
解决方案二:
一般服务器apache,tomcat,Resin都有类似的设置