У меня есть проблемы с netty.Netty обрабатывает сообщения только в одном потоке
Несколько лет назад я использовал smartfox server 1.6x, и это многопотоковая модель привела меня к обработке сообщений для моего соединения в разных потоках. И эта функция заставила меня написать некоторый код синхронизации потоков, чтобы все сообщения обрабатывались правильно.
Теперь я использую netty, так как это потрясающий и очень полезный продукт для моих целей.
Итак, я реализовал некоторую серверную логику. Мой тест был следующий
- сервер добавлять сообщения в очередь, обрабатывает каждое сообщение и текущий поток спит в течение 3-х секундов
- клиента спам около 10 сообщений в секунду
И я увидел, что перед первым сообщения (первая десятка) не обрабатываются (обычно около 30 секунд), второй пакет сообщений не обрабатывается в параллельном потоке.
Так основные вопросы:
обрабатывать ли Нетти все сообщения для одного соединения только в одном потоке? Если да, должен ли я реализовать некоторый дополнительный код для этого в разных потоках или что модель с одним потоком для одного соединения работает хорошо?
Нетти конфигурации:
_boss = new NioEventLoopGroup(1);
_worker = new NioEventLoopGroup(8);
_bootstrap = new ServerBootstrap();
_bootstrap.group(_boss, _worker)
.channel(NioServerSocketChannel.class)
.childHandler(new NettyChannelInitializer())
.option(ChannelOption.SO_BACKLOG, 128)
.childOption(ChannelOption.SO_KEEPALIVE, true);
_bootstrap.bind(_port).sync();
NettyChannelInitializer:
private static final ExtentionHandler SharedExtentionHandler = new ExtentionHandler();
private static final EventExecutorGroup ExtentionEventThreadPool = new DefaultEventExecutorGroup(20);
public void initChannel(SocketChannel channel) throws Exception
{
ChannelPipeline pipeline = channel.pipeline();
pipeline.addLast(ExtentionEventThreadPool, "extention", SharedExtentionHandler);
}
Netty использует повторное использование потоков, поскольку создание потоков является дорогостоящим. Это одна из причин, почему это быстро – mangusta