0

我的应用程序必须处理客户端 http 请求,与一些 API 通信,并将数据返回给客户端。我为我的应用程序声明了一个全局 RestTemplate,如下所示:

<bean id="httpClient" class="org.apache.commons.httpclient.HttpClient">
    <constructor-arg index="0">
        <bean id="httpClientParams" class="org.apache.commons.httpclient.params.HttpClientParams">
            <property name="authenticationPreemptive" value="false" />
        </bean>
    </constructor-arg>
    <constructor-arg index="1">
        <bean class="org.apache.commons.httpclient.MultiThreadedHttpConnectionManager">
            <property name="params">
                <bean class="org.apache.commons.httpclient.params.HttpConnectionManagerParams">
                    <property name="connectionTimeout" value="20000" />
                    <property name="soTimeout" value="20000" />
                    <property name="defaultMaxConnectionsPerHost" value="30" />
                    <property name="maxTotalConnections" value="500" />
                </bean>
            </property>
        </bean>
    </constructor-arg>
</bean>

<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
    <property name="requestFactory">
        <bean class="org.springframework.http.client.CommonsClientHttpRequestFactory">
            <property name="httpClient" ref="httpClient" />
        </bean>
    </property>
</bean>

通过设置defaultMaxConnectionsPerHost,我预计每台主机的同时连接数为30。但是通过我的测试,无论我设置多大,实际数字似乎最多为6defaultMaxConnectionsPerHost

我如何进行测试:

  • 客户端:通过浏览器同时向我的 Web 应用程序发送大约 20 个请求(我尝试过 FireFox 和 Chrome)。
  • 服务器端:通过以下方式获取连接数netstat

问题:

  • 问题一:为什么每台主机的同时连接数不是预期的30?
  • 问题 2:我的应用程序必须每秒向一台主机发送大约 10 个请求。每个请求持续 2 秒。那我应该设置什么合适的值defaultMaxConnectionsPerHost
4

1 回答 1

0

经过更多测试后,我发现问题中提到的测试方式可能是错误的。defaultMaxConnectionsPerHost并按预期工作。

于 2013-10-17T01:52:02.227 回答