diff --git a/agentscope-core/src/main/java/io/agentscope/core/model/transport/JdkHttpTransport.java b/agentscope-core/src/main/java/io/agentscope/core/model/transport/JdkHttpTransport.java index f65ef1638..a7f3f9cb7 100644 --- a/agentscope-core/src/main/java/io/agentscope/core/model/transport/JdkHttpTransport.java +++ b/agentscope-core/src/main/java/io/agentscope/core/model/transport/JdkHttpTransport.java @@ -102,6 +102,21 @@ public JdkHttpTransport(HttpClient client, HttpTransportConfig config) { } private static HttpClient buildClient(HttpTransportConfig config) { + // set connection pool for jdk http client + // refer: + // https://docs.oracle.com/en/java/javase/25/docs/api/java.net.http/module-summary.html + if (System.getProperty("jdk.httpclient.connectionPoolSize") == null) { + System.setProperty( + "jdk.httpclient.connectionPoolSize", + String.valueOf(config.getMaxIdleConnections())); + } + + if (System.getProperty("jdk.httpclient.keepalive.timeout") == null) { + System.setProperty( + "jdk.httpclient.keepalive.timeout", + String.valueOf(config.getKeepAliveDuration().getSeconds())); + } + HttpClient.Builder builder = HttpClient.newBuilder() .version(Version.HTTP_2) diff --git a/agentscope-core/src/main/java/io/agentscope/core/model/transport/OkHttpTransport.java b/agentscope-core/src/main/java/io/agentscope/core/model/transport/OkHttpTransport.java index 5e7afa5c8..03432d52c 100644 --- a/agentscope-core/src/main/java/io/agentscope/core/model/transport/OkHttpTransport.java +++ b/agentscope-core/src/main/java/io/agentscope/core/model/transport/OkHttpTransport.java @@ -111,10 +111,9 @@ private OkHttpClient buildClient(HttpTransportConfig config) { log.warn( "SSL certificate verification is disabled. This is not recommended for" + " production."); - builder = - builder.sslSocketFactory( - createTrustAllSslSocketFactory(), createTrustAllTrustManager()) - .hostnameVerifier((hostname, session) -> true); + + builder.sslSocketFactory(createTrustAllSslSocketFactory(), createTrustAllTrustManager()) + .hostnameVerifier((hostname, session) -> true); } return builder.build(); diff --git a/agentscope-core/src/test/java/io/agentscope/core/model/transport/JdkHttpTransportTest.java b/agentscope-core/src/test/java/io/agentscope/core/model/transport/JdkHttpTransportTest.java index 61be6a692..bb9b5c99c 100644 --- a/agentscope-core/src/test/java/io/agentscope/core/model/transport/JdkHttpTransportTest.java +++ b/agentscope-core/src/test/java/io/agentscope/core/model/transport/JdkHttpTransportTest.java @@ -1047,4 +1047,35 @@ void testStreamNdJsonFormatWithoutHeaderDefaultsToSse() { "{\"id\":\"2\",\"text\":\"World\"}") // This is sent before [DONE] marker .verifyComplete(); } + + @Test + void testConnectionPoolSystemProperties() { + System.clearProperty("jdk.httpclient.connectionPoolSize"); + System.clearProperty("jdk.httpclient.keepalive.timeout"); + JdkHttpTransport.builder() + .config( + HttpTransportConfig.builder() + .maxIdleConnections(10) + .keepAliveDuration(Duration.ofMinutes(5)) + .build()) + .build(); + assertEquals("10", System.getProperty("jdk.httpclient.connectionPoolSize")); + assertEquals("300", System.getProperty("jdk.httpclient.keepalive.timeout")); + } + + @Test + void testConnectionPoolSystemPropertiesAlreadySet() { + System.setProperty("jdk.httpclient.connectionPoolSize", "5"); + System.setProperty("jdk.httpclient.keepalive.timeout", "180"); + + JdkHttpTransport.builder() + .config( + HttpTransportConfig.builder() + .maxIdleConnections(10) + .keepAliveDuration(Duration.ofMinutes(5)) + .build()) + .build(); + assertEquals("5", System.getProperty("jdk.httpclient.connectionPoolSize")); + assertEquals("180", System.getProperty("jdk.httpclient.keepalive.timeout")); + } }