0

在我的代码中,有一个构建 Futures 的循环,这很慢。构建 1 个 Future 大约需要数百毫秒。我只是在谈论设置 Future 对象而不是获取响应。这是代码:

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了而不是 default NettyAsyncHttpProvider,它更快,但也提供了非常多的 Flase-Negatives (它似乎取消了非常(!)通常有效的域)。我注意到的是:我住在德国,德国 .de 域名的速度明显快于西班牙等其他国家的域名。

任何疯狂的猜测都将受到高度赞赏!:)

[EDIT]

只需切换到另一个 DNS 服务器即可解决问题。

4

1 回答 1

1

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

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

于 2014-07-21T20:48:14.457 回答