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本身是不能单独实现长连接。
------解决思路----------------------
每次请求必然是新的连接,如果想复用要先保存,之前的连接,在没有超时时可以复用。超了就要重连,还是新的。
------解决思路----------------------
刚接触httpclient,没接触楼主搞得那么深
给楼主个建议
你将 HttpPost httpPost = new HttpPost(uri);
httpPost.addHeader("Connection", "Keep-Alive"); 连接一下普通的允许长连接的网址,看能否建立起长连接,如果可以,那就可能是楼主通过httpclient发送请求的方式有错误了
------解决思路----------------------
我不会,
问一下楼主拦截请求用的是什么工具?
------解决思路----------------------
建议用 io.netty来写 有非常好异步处理机制 对http协议的理解也很深刻。
缺点是:学习成本比较高