[Feature] 替换`HttpURLConnection`为支持连接池的客户端
描述 | Description
当前NetworkUtils仍在使用HttpURLConnection, 该类不支持连接池. 然而, 在下载过程中, 连接的服务器几乎都是相同的, 反复创建和销毁连接会极大影响下载速度, 尤其是对于小文件. 考虑到HttpClient支持连接池, 建议将HttpURLConnection替换为HttpClient, 以提高下载性能
原因 | Reason
在下载过程中,连接的服务器几乎都是相同的, 连接的服务器几乎都是相同的, 反复创建和关闭连接会极大影响下载速度, 尤其是对于小文件
HttpClient 在 Java 11 才引入,而 HMCL 要支持 Java 8。这要看 @Glavo 是否有计划升级 HMCL 使用的 Java 版本。
怎么直接关掉了?
已移动至 #3764 的 sub-issue
我在思考应该用哪个库。
我本来是想用 JDK 的 java.net.http,它似乎不够灵活(比如连接池大小无法动态配置),而且出现 BUG 的时候我们也没法通过更新 HMCL 进行修复。
现在正在考虑的几个备选项:
- Apache HttpClient
- Jetty HTTP client
- OkHttp
- Netty
我在思考应该用哪个库。
我本来是想用 JDK 的
java.net.http,它似乎不够灵活(比如连接池大小无法动态配置),而且出现 BUG 的时候我们也没法通过更新 HMCL 进行修复。现在正在考虑的几个备选项:
* Apache HttpClient * Jetty HTTP client * OkHttp * Netty
https://zhuanlan.zhihu.com/p/584097538 性能测试看起来Netty好点?
HttpURLConnection 也会对连接进行复用,所以我们没有换到其他 HTTP 客户端的迫切需求。