OkHttp不';当JVM终止时,似乎不会关闭连接

OkHttp不';当JVM终止时,似乎不会关闭连接,jvm,okhttp,Jvm,Okhttp,在对最初配置为从不终止空闲连接的服务器执行一些OkHttp(4.8.0)集成测试时,我发现OkHttp连接从未关闭,即使JVM(测试运行程序)已终止。 虽然我可以在连接池上手动调用executeall,并手动关闭套接字,但我希望当JVM退出时,该池会在其自身之后正确清理。有什么原因使这些套接字保持打开状态而我没有考虑到吗?对于典型的客户端用例,如果您正确地发出和使用请求,OkHttp不应该要求显式关闭。然而,通常HTTP/2在共享连接(套接字)上工作,并且这些连接可以很容易地在OkHttpCli

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

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

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

正如你所发现的,如果你真的想要,你可以强制这样做


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

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

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

正如你所发现的,如果你真的想要,你可以强制这样做


您是希望有序关机,以便服务器知道OkHttp连接已释放,还是希望帮助操作系统释放套接字?

虽然我可能设置不正确,但在我看来,“一旦进程停止,所有套接字都将关闭”这并不像我想象的那样是一个强有力的保证——除非我强制逐出它们,否则服务器不会被告知它们已关闭。虽然我可能设置不正确,但在我看来“一旦进程停止,所有套接字都将关闭”这并不像我想象的那样是一个强有力的保证——除非我强制驱逐它们,否则服务器不会被告知它们已关闭。