【问题标题】:OkHttp doesn't seem to close connections when the JVM terminates当 JVM 终止时,OkHttp 似乎没有关闭连接
【发布时间】:2020-11-17 23:46:24
【问题描述】:

在使用 OkHttp (4.8.0) 对最初配置为永不终止空闲连接的服务器执行一些集成测试时,我看到 OkHttp 连接从未关闭,即使 JVM(测试运行程序)已终止。 虽然我可以在连接池上手动调用evictAll 并且确实会手动关闭套接字,但我希望当JVM 退出时池能够自行正确清理。是否有一些我没有考虑的原因使这些套接字保持打开状态?

【问题讨论】:

    标签: jvm okhttp


    【解决方案1】:

    对于典型的客户端用例,如果您正确地发出和使用请求,OkHttp 不应要求显式关闭。然而,通常 HTTP/2 在共享连接(套接字)上工作,并且这些可以很容易地在 OkHttpClient 实例之间共享,因为您可以在新实例中分叉和修改一些设置。

    线程和套接字不应阻止 JVM 终止,一旦进程终止,所有套接字都会关闭。这被认为是“清理”的一种形式。

    如你所见,如果你真的想要,你可以强制这样做。

    https://square.github.io/okhttp/4.x/okhttp/okhttp3/-ok-http-client/#shutdown-isnt-necessary

    您是想要有序关闭以使服务器知道 OkHttp 连接已被释放,还是帮助操作系统释放套接字?

    【讨论】:

    • 虽然我的设置可能不正确,但在我看来,“一旦进程终止,所有套接字都关闭”并没有我想象的那么强的保证——它没有除非我强制驱逐它们,否则看起来服务器已被告知它们已关闭。
    猜你喜欢
    • 1970-01-01
    • 2023-03-07
    • 2017-06-27
    • 2015-08-26
    • 2015-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多