HttpClient 每调用 100 次后 "reinitialized"
HttpClient is "reinitialized" after each 100 calls
我有 Groovy 脚本,必须 post 多次调用我的 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 并调用 Google - 此问题未重现。
是否可以避免这种重新初始化?
您目前无法避免这笔 re-initialization 费用。
API 网关在 100 个请求后关闭连接(它将 return 连接:关闭作为响应之一 headers)。客户端必须 re-establish TCP 连接并执行完整的 TLS 握手。
我来自 API Gateway,我会看看我们是否可以对此做些什么。不过,我不能保证什么。
更新:现在这应该不是什么问题了。人数增加到1000人
我有 Groovy 脚本,必须 post 多次调用我的 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 并调用 Google - 此问题未重现。
是否可以避免这种重新初始化?
您目前无法避免这笔 re-initialization 费用。
API 网关在 100 个请求后关闭连接(它将 return 连接:关闭作为响应之一 headers)。客户端必须 re-establish TCP 连接并执行完整的 TLS 握手。
我来自 API Gateway,我会看看我们是否可以对此做些什么。不过,我不能保证什么。
更新:现在这应该不是什么问题了。人数增加到1000人