用于持久连接的 Java HTTP 连接池在 http://download.oracle.com/javase/6/docs/technotes/guides/net/http-keepalive.html中进行了描述。但是,如果连接不被重用,则没有迹象表明连接是否会从缓存中逐出,如果是,超时长度是多少。
我发现的唯一参考是来自http://www.java.net/forum/topic/performance/general-performance-discussion/reusing-socket-connections-httpurlconnection-0的以下评论:
“保持活动套接字会超时。如果服务器在 HTTP 标头中发回超时,则使用该超时值。否则,超时仅为 5 秒,之后套接字将不会被重用 [.. .] 不幸的是,你不能设置超时;它在实现的内部是硬件化的。”
如果属实,这将解释我们看到的一些奇怪行为,我写了一个小测试用例似乎证实了这一点。(在 Windows 上使用 Java 1.6.20。)
有谁知道这方面的任何文件?此外,该评论已有数年历史。超时仍然是硬编码的,还是可以设置?