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

質問:

  • 質問 1: ホストあたりの同時接続数が予想どおり 30 にならないのはなぜですか?
  • 質問 2: 私のアプリケーションは、1 つのホストに毎秒約 10 個のリクエストを送信する必要があります。各リクエストは 2 秒間続きます。では、適切な値は何defaultMaxConnectionsPerHostに設定すればよいでしょうか?
4

1 に答える 1

0

さらにいくつかのテストを行った後、質問に記載されているテスト方法が間違っている可能性があることがわかりました。そしてdefaultMaxConnectionsPerHost、期待どおりに動作します。

于 2013-10-17T01:52:02.227 に答える