HttpClient是"重新初始化"每100次通话后

时间:2016-09-07 11:25:48

标签: java amazon-web-services groovy aws-api-gateway apache-commons-httpclient

我有Groovy脚本,必须向我的API发布大量调用。我正在使用一个http客户端进行所有通话 - for best performance

我的代码:

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会在第一次调用时初始化某些内容,并且必须在每次第100次调用后重新初始化相同的内容。

编辑:我的代码调用了亚马逊API网关。当我将方法改为GET并致电谷歌时 - 这个问题没有被复制。

是否可以避免重新初始化?

1 个答案:

答案 0 :(得分:1)

目前无法避免这种重新初始化费用。

API网关在100次请求后关闭连接(它将返回Connection:close作为响应头之一)。客户端必须重新建立TCP连接并执行完整的TLS握手。

我来自API Gateway,我会看看我们是否可以采取任何措施。虽然,我不能保证任何事情。

更新:现在这应该不是问题了。这个数字已经增加到1000个。