在我的代码中有建立期货的循环,这是减速的方式。大约需要几百毫秒才能构建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服务器解决了这个问题。
我没有亲自测试过异步HTTP客户端,但你有没有尝试koush的'AndroidAsync'? [链接](https://github.com/koush/AndroidAsync) –