知识点

相关文章

更多

最近更新

更多

httpclient 关闭连接池中无效连接

2019-03-17 21:48|来源: 网路

httpclient 关闭连接池中无效连接的思路使用一个单独的线程完成连接池中的无效链接的清理,其中线程中通过HttpClientConnectionManager 的 closeExpiredConnections 方法来关闭无效连接


示例:

package com._656463.httpclient;
 
import org.apache.http.conn.HttpClientConnectionManager;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
 
public class ClientEvictExpiredConnections {
 
    public static void main(String[] args) throws Exception {
        PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
        // 设置最大连接数
        cm.setMaxTotal(200);
        // 设置每个主机地址的并发数
        cm.setDefaultMaxPerRoute(20);
 
        new IdleConnectionEvictor(cm).start();
    }
 
    public static class IdleConnectionEvictor extends Thread {
 
        private final HttpClientConnectionManager connMgr;
 
        private volatile boolean shutdown;
 
        public IdleConnectionEvictor(HttpClientConnectionManager connMgr) {
            this.connMgr = connMgr;
        }
 
        @Override
        public void run() {
            try {
                while (!shutdown) {
                    synchronized (this) {
                        wait(5000);
                        // 关闭失效的连接
                        connMgr.closeExpiredConnections();
                    }
                }
            } catch (InterruptedException ex) {
                // 结束
            }
        }
 
        public void shutdown() {
            shutdown = true;
            synchronized (this) {
                notifyAll();
            }
        }
    }
}

本文参考网络

相关问答

更多
  • 一、所需要的jar包 httpclient-4.5.jar httpcore-4.4.1.jar httpmime-4.5.jar 二、实例 Java代码 package cn.tzz.apache.httpclient; import java.io.File; import java.io.IOException; import java.net.URL; import java.util.ArrayList;
  • HTTP本身不是长链接,所以你必须主动发送数据,判断有无回复
  • 其实这样比是有问题的,http实际上是一种应用级协议,常用的是http1.0和http 1.1协议。而socket则是一个连接,它直接在链路层上进行连接。在该连接的基础之可以实现各种应用级协议。如通过socket可以实现ftp协议、http、https、NetBIOS、Win、Iron等等,甚至于可以实现蓝牙(蓝牙连接在.net中不被支持,是因为socket所需参数的协议簇中枚举中没有蓝牙,但可以直接通过数据,实现与蓝牙的通信)。所以http是一个协议与Socket连接是没有可比性的,在.net中,可实现h ...
  • 10:07:29.746:D / org.apache.http.headers(1529):>>连接:Keep-Alive 您正在请求Keepalive。 10:07:29.836:D / org.apache.http.wire(1529):<< “Connection:close [EOL]” 服务器拒绝它。 在你的最后,你无能为力。 10:07:29.746: D/org.apache.http.headers(1529): >> Connection: Keep-Alive You are req ...
  • 只需在URI中指定HTTPS。 new Uri("https://foobar.com/"); Foobar.com将需要一个受信任的SSL证书,否则您的呼叫将以不可信的错误失败。 编辑答案: 具有HttpClient的ClientCertificates WebRequestHandler handler = new WebRequestHandler(); X509Certificate2 certificate = GetMyX509Certificate(); handler.ClientCert ...
  • 根据MSDN ,因为.NET 4.5以下实例方法是线程安全的 (感谢@ischell): CancelPendingRequests DeleteAsync GetAsync GetByteArrayAsync GetStreamAsync GetStringAsync PostAsync PutAsync SendAsync According to MSDN, since .NET 4.5 The following instance methods are thread safe (thanks @ ...
  • 一般来说: - netstat -na | 更多 对于特定的IP和端口: - netstat -na | ip:端口| 更多 In general :- netstat -na | more For a particular IP and port:- netstat -na | ip:port | more
  • 根据apache ,建议每个通信组件或甚至每个应用程序都有一个HttpClient实例。 但在实现这样的Singleton HttpClient之前,您需要牢记。 确保您使用线程在后台执行所有下载,并且不使用UI线程。 维护所有下载请求的队列。 所有这些请求都需要排队并一个接一个地运行。 如果在清除HttpClient队列之前切换活动,则应清除队列,以便它不会开始加载新活动的组件。 一切都完成后关闭客户端。 According to apache it is recommended to have a si ...
  • 这条线是你的问题: return await Task.Run(() => responseBody); 你尝试过吗? : return responseBody; 试试这个: public async static List GetAccountList() { string json = await DataService.GetRequest(url); ... } That line is your problem: return await Tas ...
  • 正如我在评论中提到的,HttpClient和JEditorPane用于获取URL内容的URLConnection不会相互通信。 因此,HttpClient可能获取的任何cookie都不会转移到URLConnection。 但是,您可以像这样子类化JEditorPane: final HttpClient httpClient = new DefaultHttpClient(); /* initialize httpClient and fetch your login page to get the co ...