From 74df000287632d8f3c7ebefcfd5097ef8c4f2519 Mon Sep 17 00:00:00 2001 From: yukaidi Date: Thu, 28 May 2026 23:06:45 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20PanBase=20WebClient=20=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E9=9D=99=E6=80=81=E5=85=B1=E4=BA=AB=E5=8D=95=E4=BE=8B=EF=BC=8C?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=AF=8F=E8=AF=B7=E6=B1=82=E5=88=9B=E5=BB=BA?= =?UTF-8?q?4=E4=B8=AA=E5=AE=9E=E4=BE=8B=E7=9A=84=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E6=B3=84=E6=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit WebClient 是线程安全的,将 client/clientNoRedirects/clientDisableUA 改为 static 共享实例, 避免每次解析请求创建4个独立 WebClient(各含连接池)。 clientSession 仍保持实例级(管理 cookie,非线程安全)。 代理模式下仍创建独立 WebClient 实例。 --- .../src/main/java/cn/qaiu/parser/PanBase.java | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/parser/src/main/java/cn/qaiu/parser/PanBase.java b/parser/src/main/java/cn/qaiu/parser/PanBase.java index c1bc071..7ea50c4 100644 --- a/parser/src/main/java/cn/qaiu/parser/PanBase.java +++ b/parser/src/main/java/cn/qaiu/parser/PanBase.java @@ -40,28 +40,34 @@ public abstract class PanBase implements IPanTool { protected Promise promise = Promise.promise(); /** - * Http client + * 共享的 WebClient 实例(线程安全,避免每请求创建导致资源泄漏) */ - protected WebClient client = WebClient.create(WebClientVertxInit.get(), + private static final WebClient SHARED_CLIENT = WebClient.create(WebClientVertxInit.get(), new WebClientOptions()); + private static final WebClient SHARED_CLIENT_NO_REDIRECTS = WebClient.create(WebClientVertxInit.get(), + new WebClientOptions().setFollowRedirects(false)); + private static final WebClient SHARED_CLIENT_DISABLE_UA = WebClient.create(WebClientVertxInit.get(), + new WebClientOptions().setUserAgentEnabled(false)); /** - * Http client session (会话管理, 带cookie请求) + * Http client (默认使用共享实例,代理模式下使用独立实例) + */ + protected WebClient client = SHARED_CLIENT; + + /** + * Http client session (会话管理, 带cookie请求, 每实例独立) */ protected WebClientSession clientSession = WebClientSession.create(client); /** * Http client 不自动跳转 */ - protected WebClient clientNoRedirects = WebClient.create(WebClientVertxInit.get(), - new WebClientOptions().setFollowRedirects(false)); + protected WebClient clientNoRedirects = SHARED_CLIENT_NO_REDIRECTS; /** * Http client disable UserAgent */ - protected WebClient clientDisableUA = WebClient.create(WebClientVertxInit.get() - , new WebClientOptions().setUserAgentEnabled(false) - ); + protected WebClient clientDisableUA = SHARED_CLIENT_DISABLE_UA; protected ShareLinkInfo shareLinkInfo;