急死人,httpclient4.3 如何保持长连接?

goas 2014-12-30 03:46:01

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 的.



...全文
7680 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_30194503 2018-07-12
  • 打赏
  • 举报
回复
302是重定向吧。登录完会返回Location,用登录的httpclient访问那个Location就能进入登录后的页面了。
lisiliang668 2016-05-09
  • 打赏
  • 举报
回复
他这个默认就是2个连接,你需要自己设置
lxlsh 2015-09-16
  • 打赏
  • 举报
回复
楼主啊,有没有解决啊,求解决办法啊
tianfang 2014-12-31
  • 打赏
  • 举报
回复
建议用 io.netty来写 有非常好异步处理机制 对http协议的理解也很深刻。 缺点是:学习成本比较高
goas 2014-12-31
  • 打赏
  • 举报
回复
wireshark
slmcygh 2014-12-30
  • 打赏
  • 举报
回复
我不会, 问一下楼主拦截请求用的是什么工具?
goas 2014-12-30
  • 打赏
  • 举报
回复
帖子快沉了
goas 2014-12-30
  • 打赏
  • 举报
回复
引用 5 楼 t_jl1979 的回复:
[quote=引用 4 楼 t_jl1979 的回复:] 服务器端收到特定请求(事前约定好,好比定了一个暗号),不返回,超时了再说,这才可以。 client本身是不能单独实现长连接。
每次请求必然是新的连接,如果想复用要先保存,之前的连接,在没有超时时可以复用。超了就要重连,还是新的。[/quote] 怎么保存呀? 我: new HttpPost() ...//怎么保存呢? new HttpGet()
goas 2014-12-30
  • 打赏
  • 举报
回复
引用 7 楼 magi1201 的回复:
刚接触httpclient,没接触楼主搞得那么深 给楼主个建议 你将 HttpPost httpPost = new HttpPost(uri); httpPost.addHeader("Connection", "Keep-Alive"); 连接一下普通的允许长连接的网址,看能否建立起长连接,如果可以,那就可能是楼主通过httpclient发送请求的方式有错误了
是长连接,只是它变成2个长连接了
姜小白- 2014-12-30
  • 打赏
  • 举报
回复
刚接触httpclient,没接触楼主搞得那么深 给楼主个建议 你将 HttpPost httpPost = new HttpPost(uri); httpPost.addHeader("Connection", "Keep-Alive"); 连接一下普通的允许长连接的网址,看能否建立起长连接,如果可以,那就可能是楼主通过httpclient发送请求的方式有错误了
goas 2014-12-30
  • 打赏
  • 举报
回复
只要复用TCP连接就行了呀
冥王之锤 2014-12-30
  • 打赏
  • 举报
回复
引用 4 楼 t_jl1979 的回复:
服务器端收到特定请求(事前约定好,好比定了一个暗号),不返回,超时了再说,这才可以。 client本身是不能单独实现长连接。
每次请求必然是新的连接,如果想复用要先保存,之前的连接,在没有超时时可以复用。超了就要重连,还是新的。
冥王之锤 2014-12-30
  • 打赏
  • 举报
回复
服务器端收到特定请求(事前约定好,好比定了一个暗号),不返回,超时了再说,这才可以。 client本身是不能单独实现长连接。
goas 2014-12-30
  • 打赏
  • 举报
回复
试过1楼的代码,无用 还是2个TCP连接
goas 2014-12-30
  • 打赏
  • 举报
回复
楼上的有用不?
姜小白- 2014-12-30
  • 打赏
  • 举报
回复
HttpPost httpPost = new HttpPost(uri); httpPost.addHeader("Connection", "Keep-Alive");

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧