如何关闭HttpClient?为什么 API 中没有 .close() 方法?

Gio*_*uri 4 java httpclient httpconnection

我想使用所谓的“自 Java 11 以来的新 HttpClient” java.net.http.HttpClient

对我来说,这非常重要确保 TCP 连接在 HTTP 往返完成后关闭

API上没有可用的.close().disconnect()类似的东西。

无法关闭连接是非常奇怪的,而且也很奇怪为什么预期的行为(发生了什么?连接是否自动关闭?何时?如何?)从未在任何地方记录过,包括Java 简介HTTP 客户端 以及示例和食谱

有小费吗?

Hol*_*ger 6

这确实是一个缺失的功能,您\xe2\x80\x99必须等待Java\xc2\xa021才能HttpClient显式关闭。

\n

请参阅错误报告JDK-8304165, \xe2\x80\x9cSupport 通过使其自动关闭\xe2\x80\x9d 来关闭 HttpClient:

\n
\n

制作java.net.http.HttpClient工具AutoCloseable是为了能够尽早回收其资源(选择器、池中的空闲连接等),而不必等待 GC 对其进行垃圾收集。

\n
\n

它的状态为 \xe2\x80\x9cApproved\xe2\x80\x9d 和修复版本 21。您还可以使用早期访问文档HttpClient进行验证,该文档显示它现在已实现AutoCloseable,因此有一个close方法也显示 \xe2\x80\ x9c 自:21\xe2\x80\x9d。

\n

  • 我十分明白你的感受。我等待关闭“MappedByteBuffer”的可能性已经二十年了。将通过 JEP 434 提供间接解决方案,该解决方案仍处于预览状态…… (2认同)