Java HttpAsyncClient每秒无法向特定路由(主机)发送多个请求
为什么Apache HttpAsyncClient每秒只发送10个请求。我做错什么了吗?这是我启动异步客户端的方法:Java HttpAsyncClient每秒无法向特定路由(主机)发送多个请求,java,apache-httpcomponents,apache-httpasyncclient,Java,Apache Httpcomponents,Apache Httpasyncclient,为什么Apache HttpAsyncClient每秒只发送10个请求。我做错什么了吗?这是我启动异步客户端的方法: PoolingNHttpClientConnectionManager connManager = null; try { if (client != null && client.isRunning()) { client.close(); } TrustStrategy acce
PoolingNHttpClientConnectionManager connManager = null;
try {
if (client != null && client.isRunning()) {
client.close();
}
TrustStrategy acceptingTrustStrategy = (certificate, authType) -> true;
SSLContext sslContext = SSLContexts.custom()
.loadTrustMaterial(null, acceptingTrustStrategy).build();
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext,
SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
Registry<ConnectionSocketFactory> socketFactoryRegistry =
RegistryBuilder.<ConnectionSocketFactory> create().register("https", sslsf).build();
Registry<SchemeIOSessionStrategy> socketRegistry = RegistryBuilder.<SchemeIOSessionStrategy>create()
.register("http", NoopIOSessionStrategy.INSTANCE)
.register("https", new SSLIOSessionStrategy(sslContext, SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER))
.build();
connManager = new PoolingNHttpClientConnectionManager(
new DefaultConnectingIOReactor( IOReactorConfig.custom()
.setConnectTimeout( connectionTimeout * 1000 ) //connectTimeout
.setSoTimeout( readTimeout * 1000 ) //readTimeout
.setIoThreadCount(10000)
.build() ), socketRegistry );
} catch (Exception e) {}
client = HttpAsyncClients.custom()
.setMaxConnPerRoute( maxConnsPerRoute )
.setConnectionManager( connManager )
.setMaxConnTotal( maxConnections )
.setKeepAliveStrategy( DefaultConnectionKeepAliveStrategy.INSTANCE )
.build();
client.start();
poolgnhttpclientconnectionmanager connManager=null;
试一试{
if(client!=null&&client.isRunning()){
client.close();
}
TrustStrategy acceptingTrustStrategy=(证书,authType)->true;
SSLContext SSLContext=SSLContexts.custom()
.loadTrustMaterial(null,acceptingTrustStrategy).build();
SSLConnectionSocketFactory sslsf=新的SSLConnectionSocketFactory(sslContext,
SSLConnectionSocketFactory。允许\u所有\u主机名\u验证程序);
注册表socketFactoryRegistry=
RegistryBuilder.create().register(“https”,sslsf.build();
注册表socketRegistry=RegistryBuilder.create()
.register(“http”,NoopIOSessionStrategy.INSTANCE)
.register(“https”,新的SSLIOSessionStrategy(sslContext,SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER))
.build();
connManager=新池gnhttpclientconnectionmanager(
新的DefaultConnectionReactor(IOReactorConfig.custom()
.setConnectTimeout(connectionTimeout*1000)//connectTimeout
.setSoTimeout(readTimeout*1000)//readTimeout
.setIoThreadCount(10000)
.build()),socketRegistry);
}捕获(例外e){}
client=HttpAsyncClients.custom()
.setMaxConnPerRoute(maxConnsPerRoute)
.setConnectionManager(连接管理器)
.SetMaxConntTotal(maxConnections)
.setKeepAliveStrategy(DefaultConnectionKeepAliveStrategy.INSTANCE)
.build();
client.start();
而且,这是我使用它的方式:
for(int i = 0; i < 100; i++) {
client.execute(request.getHttpPost(), null);
}
for(int i=0;i<100;i++){
execute(request.getHttpPost(),null);
}
如何实现每秒更多的请求???所有版本的Apache HttpClient都可以轻松地每秒生成数以万计的请求 性能问题可能与服务器代码或应用程序代码有关
.setIoThreadCount(10000) // do not do this
maxConnsPerRoute
和maxConnections
值均无效。您需要将它们直接应用于连接管理器
.setConnectionManager( connManager ) // if you do this
.setMaxConnPerRoute( maxConnsPerRoute ) // this has no effect
.setMaxConnTotal( maxConnections )
所有版本的ApacheHttpClient每秒都可以轻松生成上万个请求 性能问题可能与服务器代码或应用程序代码有关
.setIoThreadCount(10000) // do not do this
maxConnsPerRoute
和maxConnections
值均无效。您需要将它们直接应用于连接管理器
.setConnectionManager( connManager ) // if you do this
.setMaxConnPerRoute( maxConnsPerRoute ) // this has no effect
.setMaxConnTotal( maxConnections )
connManager.setMaxTotal(10);
connManager.setDefaultMaxPerRoute(10);
HttpHost host = new HttpHost("75.10.91.11", 8443, "https");
connManager.setMaxPerRoute(new HttpRoute(host), 10);
您可以在中找到完整的解释,非常感谢,在他的指导下,我将这些代码添加到我的项目中,并解决了问题:
connManager.setMaxTotal(10);
connManager.setDefaultMaxPerRoute(10);
HttpHost host = new HttpHost("75.10.91.11", 8443, "https");
connManager.setMaxPerRoute(new HttpRoute(host), 10);
您可以在中找到完整的解释,谢谢您的回复。只有一个问题:在主题“”中,他们说:根据RFC 2616规范,默认情况下,HttpAsyncClient只允许两个并发连接到同一主机。对吗?因为我将所有请求发送到同一个主机。这是正确的。默认情况下,HttpAsyncClient 4.1.x仅使用两个并发连接。如果您想增加这个数字,可以通过连接管理器实现的
ConnPoolControl
接口来实现。非常感谢您的帮助。根据你的建议,我可以根据具体路线发送更多请求,这就解决了我的问题。谢谢你的回复。只有一个问题:在主题“”中,他们说:根据RFC 2616规范,默认情况下,HttpAsyncClient只允许两个并发连接到同一主机。对吗?因为我将所有请求发送到同一个主机。这是正确的。默认情况下,HttpAsyncClient 4.1.x仅使用两个并发连接。如果您想增加这个数字,可以通过连接管理器实现的ConnPoolControl
接口来实现。非常感谢您的帮助。根据你的建议,我可以根据具体路线发送更多请求,这就解决了我的问题。