HMCL icon indicating copy to clipboard operation
HMCL copied to clipboard

[Feature] 替换`HttpURLConnection`为支持连接池的客户端

Open My-Responsitories opened this issue 1 year ago • 3 comments

描述 | Description

当前NetworkUtils仍在使用HttpURLConnection, 该类不支持连接池. 然而, 在下载过程中, 连接的服务器几乎都是相同的, 反复创建和销毁连接会极大影响下载速度, 尤其是对于小文件. 考虑到HttpClient支持连接池, 建议将HttpURLConnection替换为HttpClient, 以提高下载性能

原因 | Reason

在下载过程中,连接的服务器几乎都是相同的, 连接的服务器几乎都是相同的, 反复创建和关闭连接会极大影响下载速度, 尤其是对于小文件

My-Responsitories avatar Jan 07 '25 03:01 My-Responsitories

HttpClient 在 Java 11 才引入,而 HMCL 要支持 Java 8。这要看 @Glavo 是否有计划升级 HMCL 使用的 Java 版本。

yushijinhun avatar Jan 07 '25 22:01 yushijinhun

怎么直接关掉了?

zkitefly avatar Mar 29 '25 07:03 zkitefly

已移动至 #3764 的 sub-issue

Image

burningtnt avatar Mar 29 '25 07:03 burningtnt

我在思考应该用哪个库。

我本来是想用 JDK 的 java.net.http,它似乎不够灵活(比如连接池大小无法动态配置),而且出现 BUG 的时候我们也没法通过更新 HMCL 进行修复。

现在正在考虑的几个备选项:

  • Apache HttpClient
  • Jetty HTTP client
  • OkHttp
  • Netty

Glavo avatar Jul 28 '25 17:07 Glavo

我在思考应该用哪个库。

我本来是想用 JDK 的 java.net.http,它似乎不够灵活(比如连接池大小无法动态配置),而且出现 BUG 的时候我们也没法通过更新 HMCL 进行修复。

现在正在考虑的几个备选项:

* Apache HttpClient

* Jetty HTTP client

* OkHttp

* Netty

https://zhuanlan.zhihu.com/p/584097538 性能测试看起来Netty好点?

My-Responsitories avatar Jul 30 '25 02:07 My-Responsitories

HttpURLConnection 也会对连接进行复用,所以我们没有换到其他 HTTP 客户端的迫切需求。

Glavo avatar Aug 06 '25 15:08 Glavo