2014-07-21 36 views
0

在我的代码中有建立期货的循环,这是减速的方式。大约需要几百毫秒才能构建1个Future。我只是谈论设置Future对象而不是获取Reponse。下面的代码:Ning的AsyncHttpClient构建期货的方式太慢了(在这种情况下)

while(settings.getCrawlerQueue().size() < settings.getCrawlerQueueSize()) { 
    Task task = taskQueue.poll(); 
    task = setFutureInTask(assignment, task); 
} 

而且setFutureInTask()代码:

public Task setFutureInTask(String assignment, Task task) { 
    task.setParserAssignment(assignment); 
     switch(assignment){ 

     case "stuff": 
      task.setFuture(asyncClientStandard 
         .prepareGet("http://"+task.getDomain()) 
         .execute() 
        ); 
      break; 
[...] 

我尝试不同的Java的JDK和版本中的一些东西,我读建议(无法找到它:/),但没有帮助。也尝试JDKAsyncHttpProvider而不是默认NettyAsyncHttpProvider,这是更快的方式,但也提供了非常多的Flase-Negatives(它似乎取消非常(!)经常有效的域)。 我注意到的是:我住在德国,德国的德域比西班牙等其他国家的域名更快。

任何疯狂的猜测是高度赞赏! :)

[EDIT] 

简单地切换到另一个DNS服务器解决了这个问题。

+1

我没有亲自测试过异步HTTP客户端,但你有没有尝试koush的'AndroidAsync'? [链接](https://github.com/koush/AndroidAsync) –

回答

1

我在编写和试验我的HTTP负载测试插件时遇到过类似的问题(如果不是相同的话)。名称解析似乎在创建未来时同步发生,并且如果您的DNS缓存工作不正常,那么您每次都要为整个DNS查找往返支付费用。

至于如何修复这个问题,很难说。我通常会切换到另一个不会显示此问题的网络接口。

+0

“DNS查找往返”的东西非常有意义,目前在我的ISP有一个DNS问题。 “切换到另一个网络接口”是什么意思? – Crayl

+0

在我的情况下,我可以选择通过公司网络或通过WiFi直接连接DSL。 –

+0

简单地切换DNS服务器帮助:D – Crayl