0

私はGroovyスクリプトを使用しています。私は、すべてのコールに対して1つのHTTPクライアントを使用しています - for best performanceHttpClientは100回の呼び出しごとに「再初期化」されます

が私のコード:

httpClient = new HttpClient() 
def start = new Date().getTime() 
def i = 0 

for (item in items) { 
    post(item) 
    def spend = new Date().getTime()- start // usual call takes 100-300 miliseconds 
    start = new Date().getTime() 

    if(spend>1000){ 
    logger.debug i 
    } 
    ++i 
} 

def post(item){ 
    def httpMethod = new PostMethod(endpoint) 
    httpMethod.setRequestHeader(new Header("Content-Type", "application/json")) 
    httpMethod.setRequestHeader(new Header("Host", AWS.Host)) 
    httpMethod.setRequestHeader(new Header("x-amz-date", amzDate)) 
    httpMethod.setRequestHeader(new Header("Authorization", authorizationHeader)) 
    def requestEntity = new StringRequestEntity(item, "application/json", "UTF-8") 
    httpMethod.setRequestEntity(requestEntity) 
    def statusCode = httpClient.executeMethod(httpMethod) 
    httpMethod.releaseConnection() 
    return statusCode >= 200 && statusCode < 300 
} 

私のために印刷されたこのコード:

DEBUG: 0 : 1504 
DEBUG: 100 : 1389 
DEBUG: 200 : 1177 
DEBUG: 400 : 1200 
DEBUG: 500 : 1058 
... 

私は正しいのHttpClientを得るように、第1の中に何かを初期化しています100回目のコールごとに同じものを再初期化する必要があります。

EDIT:マイコードはAmazon APIゲートウェイを呼び出します。メソッドをGETに変更してGoogleに電話すると、この問題は再現されませんでした。

この再初期化を回避できますか?

答えて

1

この再初期化コストを避けることは現時点では不可能です。

APIゲートウェイは100リクエスト後に接続を終了しています(これは応答ヘッダーの1つとしてConnection:closeを返します)。クライアントはTCP接続を再確立し、完全なTLSハンドシェイクを実行する必要があります。

私はAPIゲートウェイから来ており、私たちはこれについて何かできるかどうかを見ていきます。しかし、私は何も約束することはできません。

更新:これは今はあまり問題にならないはずです。番号は1000に増加しました。

関連する問題