Я просто портирую некоторый код с .net на Java.Я использовал библиотеку AsyncHttpClient (https://github.com/sonatype/async-http-client) с провайдером Netty.
При небольшом тестировании я с удивлением обнаружил, что во время вызова execute, например:
httpClient.prepareGet("http://bbc.co.uk").execute(
new AsyncCompletionHandler<Response>() { ... });
NettyAsyncHttpProvider выполняет загрузочное подключение к сайту, т. Е.
bootstrap.connect(new InetSocketAddress(
AsyncHttpProviderUtils.getHost(uri),
AsyncHttpProviderUtils.getPort(uri)));
EDIT: , чтобы уточнить класс NettyAsyncHttpProvider, который является частью библиотеки AsyncHttpClient. Он не имеет ничего общего с самой Netty.
Это означает, что на чем-то похожем на веб-сайт bbc (на моем обычном соединении) выполнение завершается примерно через 300 мс (тогда асинхронное получение / завершение происходит почти сразу). Это действительно убивает производительность моего диспетчера, которыйПопытка начать несколько асинхронных вызовов. Когда каждый вызов в один и тот же домен, он работает хорошо. В моей ситуации у меня есть сотни различных доменов, поэтому каждый вызов влечет за собой начальную задержку, в то время как соединение установлено, что убивает пропускную способность диспетчера.
Может кто-нибудь предложить какие-либо советы о том, как использоватьбиблиотека, так что она действительно работает асинхронно или в альтернативной библиотеке?
Спасибо, Пол