zoukankan      html  css  js  c++  java
  • [Java] HttpClient有个古怪的stalecheck选项

    打开stale check会让每次http请求额外消耗15毫秒。而且stalecheck选项缺省是打开的。

    这有必要吗????

    在局域网里面调用web api service的时候会死人的。

    http://stackoverflow.com/questions/11219325/why-does-defaulthttpclient-send-data-over-a-half-closed-socket
    http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html
    http://www.mail-archive.com/httpclient-users@hc.apache.org/msg02710.html

    去查了一些资料,发现我们为了性能都应该关闭stalecheck。

    有人建议java的httpClient需要在连接池里面加上一个idle monitor thread去把broken的连接去除掉。否则re-use的stale connection可能已经被server断开了,则会引起异常。

    但是由于java的传统通讯方式是阻塞的,所以全局的idle monitor thread是无法通用的。为了支持大量连接,为每个连接配置一个monitor thread也是不可行的。

    因此,apache httpClient的官方文档建议:

    ClientConnectionManager#closeExpiredConnections()
    ClientConnectionManager#closeIdleConnections()
    调用者要自己定时调用上述两个方法之一,来减少broken stale connections

    与此同时,调用者需要自己决定,当发现io exception的时候,是否要retry。

  • 相关阅读:
    Django URL 命名空间
    数据库
    iOS之网络数据下载和JSON解析
    IOS之AFNetworking的使用
    IOS之网络数据下载和JSON解析
    IOS之XML解析
    iOS网络基础知识
    iOS开发--Block
    IOS开发——使用数据库
    IOS 开发下拉刷新和上拉加载更多
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3174410.html
Copyright © 2011-2022 走看看