【发布时间】:2011-06-28 12:34:15
【问题描述】:
用于持久连接的 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的以下cmets:
"keep alive sockets 会超时。如果服务器在 HTTP 标头中发回超时,则使用该超时值。否则,超时仅为 5 秒,之后该套接字将不会被重用[...] 不幸的是,您无法设置超时;它在实现的内部是硬件化的。”
如果属实,这将解释我们看到的一些奇怪行为,我写了一个小测试用例似乎证实了这一点。 (在 Windows 上使用 Java 1.6.20。)
有人知道这方面的任何文档吗?此外,该评论已有数年历史。超时是否仍然是硬编码的,还是可以设置?
【问题讨论】:
-
说实话,每当我有这样的问题时,我都会去源代码。大部分 Java 库源代码都可以在 src.zip 中找到,如果您想要更深入的内容,您可以通过深入研究 OpenJDK 源代码来获得一个想法。如果他们没有记录语义,那么可以使用源来找出“真正”发生了什么,尽管如果这些假设在以后的版本中发生更改,显然依赖系统的未记录方面可能是危险的。但至少你现在“知道”发生了什么。
标签: java http caching connection persistent