Я работаю через пример кода HTTP-клиента Netty, чтобы выполнять HTTP-запросы в параллельной многопоточной среде.
Однако моя система полностью ломается (за множеством исключений) при довольно низкой пропускной способности.
В почти псевдокоде:
ClientBootstrap bootstrap = new ClientBootstrap(new NioClientSocketChannelFactory())
bootstrap.setPipelineFactory(new HttpClientPipelineFactory());
ChannelFuture future = bootstrap.connect(new InetSocketAddress(host, port));
Channel channel = future.awaitUninterruptibly().getChannel();
HttpRequest request = new DefaultHttpRequest();
channel.write(request);
В примере, чтобы сделать запрос, я создаю ClientBootstrap, а оттуда (через несколько обручей) Channel для записи HTTPRequest.
Все это работает и хорошо.
Однако в параллельной ситуации должны ли все запросы проходить через одни и те же обручи? Я думаю, что это то, что ломает вещи для меня в данный момент. Должен ли я повторно использовать соединение или структурировать свой клиент совершенно по-другому?
Кроме того: я делаю это в Clojure, если это вообще имеет значение.