【问题标题】:With Apache HttpClient, why isn't my connection timeout working?使用 Apache HttpClient,为什么我的连接超时不起作用?
【发布时间】:2008-09-25 09:34:02
【问题描述】:

我的 httpclient 实现在调用 doGetConnection() 时偶尔会抛出异常。但是,我设置了以下超时时间

_moHttpClient.setHttpConnectionFactoryTimeout(30000);

看起来我的超时时间几乎没有被占用。还有其他地方我需要设置超时以确保这种行为不会再次发生

【问题讨论】:

    标签: java httpclient


    【解决方案1】:

    你会抛出什么异常?

    不要忘记您有 两次 超时来更改/检查。来自HttpConnectionParams

    setConnectionTimeout()
    setSoTimeout()
    

    这样您就可以控制等待连接到服务器的时间,以及套接字上的操作在超时之前需要多长时间。

    【讨论】:

    【解决方案2】:
        HttpConnectionManagerParams cmparams = new HttpConnectionManagerParams();
        cmparams.setSoTimeout(10000);
        cmparams.setTcpNoDelay(true);
        HttpConnectionManager manager = new SimpleHttpConnectionManager();
        manager.setParams(cmparams);
        params = new HttpClientParams();
        params.setSoTimeout(5000);
        client = new HttpClient(params, manager);
    

    我想知道为什么我设置了两个不同的 SoTimeouts。也许我是想找出哪个是真正活跃的,因为我在使用时遇到了和你一样的问题。

    以上内容现在在我们这里是实时代码,但我不能说它是否有效是因为它是正确的,还是因为天意在对我微笑(而另一端通常总是可用的)。

    【讨论】:

      【解决方案3】:

      cmparams.setSoTimeout(10000);

      这个默认是给所有HttpClient的。

      params.setSoTimeout(5000);

      这个是针对特定的httpclient的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-31
        • 1970-01-01
        • 2014-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-13
        相关资源
        最近更新 更多