当前位置: 代码迷 >> J2EE >> 急死人,httpclient4.3 怎么保持长连接
  详细解决方案

急死人,httpclient4.3 怎么保持长连接

热度:660   发布时间:2016-04-17 23:05:19.0
急死人,httpclient4.3 如何保持长连接?

httpclient4.3 如何保持长连接?  看起来是个简单的问题
我的代码 :
	
cm = new PoolingHttpClientConnectionManager();
        cm.setMaxTotal(100);
        cm.setDefaultMaxPerRoute(20);
        SocketConfig socketConfig = SocketConfig.custom()
                .setSoKeepAlive(true)
                .build();
        cm.setDefaultSocketConfig(socketConfig);
        httpclient=HttpClients.custom().setConnectionManager(cm).build();
       
      
我做的操作是先登陆(POST),得到Cookie,然后用这个Cookie去访问 /omsweb(GET)


但是实际是有2个TCP连接,没有复用Tcp连接,   (服务是单一session控制) 
登陆成功,但是得到302,做不了什么事

另外 ,HttpGet和HttpPost是new出来的. HttpClient是static public 的.


  

------解决思路----------------------
HttpPost httpPost = new HttpPost(uri);
httpPost.addHeader("Connection", "Keep-Alive");
------解决思路----------------------
服务器端收到特定请求(事前约定好,好比定了一个暗号),不返回,超时了再说,这才可以。
client本身是不能单独实现长连接。

------解决思路----------------------
引用:
服务器端收到特定请求(事前约定好,好比定了一个暗号),不返回,超时了再说,这才可以。
client本身是不能单独实现长连接。

每次请求必然是新的连接,如果想复用要先保存,之前的连接,在没有超时时可以复用。超了就要重连,还是新的。
------解决思路----------------------
刚接触httpclient,没接触楼主搞得那么深
给楼主个建议
你将 HttpPost httpPost = new HttpPost(uri);
httpPost.addHeader("Connection", "Keep-Alive");  连接一下普通的允许长连接的网址,看能否建立起长连接,如果可以,那就可能是楼主通过httpclient发送请求的方式有错误了

------解决思路----------------------
我不会,
问一下楼主拦截请求用的是什么工具?
------解决思路----------------------
建议用 io.netty来写 有非常好异步处理机制 对http协议的理解也很深刻。
缺点是:学习成本比较高