我从初始URI GET请求开始。我返回结果以及指向下一批记录的链接。我通过此循环直到检索所有记录。记录器显示HttpClientHelper在每个请求之后开始和停止时,性能似乎受到了打击。这是可以避免的吗?

Client client = new Client(new Context(), Protocol.HTTP);
ClientResource clientResource;
JsonRepresentation rep;
JSONObject object;
while(nextURI !=null)
{
    clientResource = new ClientResource(nextURI);

    //excessive HttpClientHelper start/stop triggered at next line
    rep = new JsonRepresentation(service.get(MediaType.APPLICATION_JSON));

    clientResource.setNext(client);
    .
    .
    .
}


记录器显示以下内容:


  2015年5月13日,上午9:30:52 org.restlet.ext.net.HttpClientHelper开始
  
  INFO:启动HTTP客户端2015年5月13日,上午9:30:53
  org.restlet.ext.net.HttpClientHelper开始
  
  INFO:启动HTTP客户端2015年5月13日,上午9:30:53
  org.restlet.ext.net.HttpClientHelper开始
  
  INFO:启动HTTP客户端2015年5月13日,上午9:30:53
  org.restlet.ext.net.HttpClientHelper停止
  
  INFO:停止HTTP客户端2015年5月13日,上午9:30:53
  org.restlet.ext.net.HttpClientHelper停止
  
  INFO:停止HTTP客户端

最佳答案

我认为您调用方法setNext为时已晚。您需要在任何HTTP调用之前以及在创建ClientResource实例之后立即调用它,以防止客户端连接器在每次调用时启动。

您可以在下面找到一个示例:

Client client = new Client(new Context(), Protocol.HTTP);

for (int i = 0; i < 5; i++) {
    ClientResource clientResource = new ClientResource("http://...");
    clientResource.setNext(client);

    Representation representation = clientResource.get();
    (...)
}


在这种情况下,客户端连接器仅启动一次。

希望对您有帮助,
蒂埃里

07-21 18:52