AsyncHttpClient Нина строит Futures слишком медленно (в этом случае)

В моем коде есть цикл, который строит фьючерсы, что очень медленно. Требуется приблизительно сотни миллисекунд, чтобы построить только 1 Будущее. Я просто говорю о настройке объекта 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 вместо по умолчанию NettyAsyncHttpProvider, что намного быстрее, но также предоставляет очень много Flase-Negatives (кажется, отменяет очень (!) часто действительные домены). Я заметил следующее: я живу в Германии, и немецкие домены.de заметны быстрее, чем домены из других стран, таких как Испания.

Любое дикое предположение высоко ценится!:)

[EDIT]

Простое переключение на другой DNS-сервер решило проблему.

1 ответ

Решение

У меня возникла похожая (если не идентичная) проблема при написании и экспериментировании с моим подключаемым модулем тестирования нагрузки HTTP. Разрешение имен происходит синхронно при создании будущего, и если ваше кэширование DNS не работает должным образом, вы каждый раз платите за весь обход DNS.

Что касается того, как решить эту проблему, очень сложно сказать. Я обычно просто переключаюсь на другой сетевой интерфейс, который бы не показывал эту проблему.

Другие вопросы по тегам