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。


  • 相关阅读:
    PHP 数据库 ODBC
    PHP MySQL Delete
    PHP MySQL Update
    PHP MySQL Order By 关键词
    PHP MySQL Where 子句
    01_今日介绍
    00_前情回顾
    02_cfork分叉进程
    01_c++下jni开发说明
    17_activity任务栈和启动模式
  • 原文地址:https://www.cnblogs.com/hehe520/p/6330360.html
Copyright © 2011-2022 走看看