Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 许多请求的httpclient超时_Java_Apache_Jakarta Ee_Httpclient_Apache Httpclient 4.x - Fatal编程技术网

Java 许多请求的httpclient超时

Java 许多请求的httpclient超时,java,apache,jakarta-ee,httpclient,apache-httpclient-4.x,Java,Apache,Jakarta Ee,Httpclient,Apache Httpclient 4.x,为了模拟一个有很多用户的Web应用程序,我使用了for循环,我知道它仍然非常不同,因为这将是单线程的。我的代码在下面 public CloseableHttpClient getHttpClient() { try{ SSLContext context = null; TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {

为了模拟一个有很多用户的Web应用程序,我使用了for循环,我知道它仍然非常不同,因为这将是单线程的。我的代码在下面

public CloseableHttpClient getHttpClient() {
        try{
            SSLContext context = null;
            TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
                public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                    return null;
                }

                public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) {
                }

                public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) {
                }
            } };

            try {
                context = SSLContext.getInstance("SSL");
            } catch (NoSuchAlgorithmException e1) {
                e1.printStackTrace();
            }
            try {
                context.init(null, trustAllCerts, new java.security.SecureRandom());
            } catch (KeyManagementException e1) {
                e1.printStackTrace();
            }

            SSLConnectionSocketFactory sslConnectionFactory = new SSLConnectionSocketFactory(context, SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
            Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory> create()
                      .register("https", sslConnectionFactory)
                      .register("http", new PlainConnectionSocketFactory()).build();

            PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
             // Increase max total connection to 200
             cm.setMaxTotal(20);
             // Increase default max connection per route to 20
             cm.setDefaultMaxPerRoute(10);
             RequestConfig defaultRequestConfig = RequestConfig.custom()
                        .setSocketTimeout(5000)
                        .setConnectTimeout(5000)
                        .setConnectionRequestTimeout(5000)
                        .build();
             CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(cm).setConnectionManagerShared(true)
                     .setDefaultRequestConfig(defaultRequestConfig).build();
            return httpClient;
        }catch(Exception ce){

        }
        return null;
    }
public CloseableHttpClient getHttpClient(){
试一试{
SSLContext context=null;
TrustManager[]trustAllCerts=new TrustManager[]{new X509TrustManager(){
public java.security.cert.X509Certificate[]getAcceptedIssuers(){
返回null;
}
public void checkClientTrusted(java.security.cert.X509Certificate[]证书,字符串authType){
}
public void checkServerTrusted(java.security.cert.X509Certificate[]证书,字符串authType){
}
} };
试一试{
context=SSLContext.getInstance(“SSL”);
}捕获(无算法异常e1){
e1.printStackTrace();
}
试一试{
init(null,trustAllCerts,new java.security.SecureRandom());
}catch(KeyManagementException e1){
e1.printStackTrace();
}
SSLConnectionSocketFactory sslConnectionFactory=新的SSLConnectionSocketFactory(上下文,SSLConnectionSocketFactory.ALLOW\u ALL\u主机名\u验证器);
注册表socketFactoryRegistry=RegistryBuilder.create()
.register(“https”,sslConnectionFactory)
.register(“http”,新的PlainConnectionSocketFactory()).build();
PoolightPClientConnectionManager cm=新的PoolightPClientConnectionManager(socketFactoryRegistry);
//将最大总连接数增加到200
cm.setMaxTotal(20);
//将每条路由的默认最大连接数增加到20
cm.setDefaultMaxPerRoute(10);
RequestConfig defaultRequestConfig=RequestConfig.custom()
.setSocketTimeout(5000)
.setConnectTimeout(5000)
.setConnectionRequestTimeout(5000)
.build();
CloseableHttpClient httpClient=HttpClients.custom().setConnectionManager(cm).setConnectionManager共享(true)
.setDefaultRequestConfig(defaultRequestConfig).build();
返回httpClient;
}捕获(例外ce){
}
返回null;
}
然后在循环中,我使用它,如下所示

try{
for(int i=0;i<500;i++){
                client = getHttpClient();
request = new HttpPost("Some https URL");
              HttpResponse response = client.execute(request);
              int statusCode = response.getStatusLine().getStatusCode();
 if (statusCode == 200 ){
                    entity = response.getEntity();
                    String content = EntityUtils.toString(entity);
}
                else{
                    entity = response.getEntity();
                    String content = EntityUtils.toString(entity);
}}
catch(Exception ce){}
finally{
                  try {
                        EntityUtils.consume(entity);
                        request.releaseConnection();
                        client.close();
                        } catch (IOException e) {
                    }
              }
试试看{

对于(int i=0;i您确定您的https服务器能够顺利处理200个连接吗?。
我觉得,问题不在于您的httpsClient代码。服务器可能会因为负载而拒绝接受少量请求?

作为下面的例外情况,httpclient显然无法建立套接字连接。httpclient尝试建立连接,但在预先定义的建立连接时间内,它无法连接

java.net.SocketTimeoutException: Read timed out at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInputStream.java:152) at java.net.SocketInputStream.read(SocketInputStream.java:122) at 
请检查这个

使用Apache HttpClient


尝试对请求设置锁定。我在代码中没有看到对资源(http客户端)的任何锁定。通过增加连接超时或使用最大连接来处理请求,问题可能会得到解决。