Ning的AsyncHttpClient构建Futures的速度太慢了(在这种情况下)



在我的代码中有一个构建期货的循环,这是一种缓慢的方式。构建一个Future需要几百毫秒的时间。我只是在谈论设置Future对象而不是获取response。下面是代码:

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 - negative(它似乎取消了非常(!)经常有效的域)。我注意到的是:我住在德国,德国的。de域名明显比西班牙等其他国家的域名快。

任何大胆的猜测都是高度赞赏的!:)

[EDIT]

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

我在编写和试验HTTP负载测试插件时遇到了类似的(如果不是完全相同的)问题。名称解析似乎在创建future时同步进行,如果DNS缓存不能正常工作,则每次都要为整个DNS查找往返支付费用。

关于如何修复这个问题,很难说。我通常会切换到另一个网络接口,这样就不会出现这个问题了。

相关内容

  • 没有找到相关文章

最新更新