Я хотел бы повторно использовать ExecutorService через мое приложение.Netty 4, использование ExecutorService
Reusing a NioWorkerPool across multiple server and client bootstraps
Я попытался воспроизвести код размещен выше с Нетти 4, но я не нашел способ сделать это, я также гугле бросить курить много, но, кажется, мы не можем обеспечить ExecutorService для начальной загрузки или объект NioEventLoopGroup.
Например, с Нетти 3 здесь, как вы можете поделиться ExecutorService:
ExecutorService executor = Executors.newCachedThreadPool();
NioClientBossPool clientBossPool = new NioClientBossPool(executor, clientBossCount);
NioServerBossPool serverBossPool = new NioServerBossPool(executor, serverBossCount);
NioWorkerPool workerPool = new NioWorkerPool(executor, workerCount);
ChannelFactory cscf = new NioClientSocketChannelFactory(clientBossPool, workerPool);
ChannelFactory sscf = new NioServerSocketChannelFactory(serverBossPool, workerPool);
...
ClientBootstrap cb = new ClientBootstrap(cscf);
ServerBootstrap sb = new ServerBootstrap(sscf);
Но с Нетти 4, насколько я знаю, вы не можете использовать ExecutorService ... Вы должны обеспечить EventLoop как NioEventLoopGroup, но мне действительно хотелось бы использовать общий исполнитель службы, который я буду использовать в своем приложении. Потому что я хочу в одну нити-пуле, чтобы иметь резьбу делать различные виды работ: расчет, сети с Нетти ...
EventLoopGroup bossGroup = new NioEventLoopGroup(); // (1)
EventLoopGroup workerGroup = new NioEventLoopGroup()
ServerBootstrap b = new ServerBootstrap(); // (2)
b.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class) // (3)
.childHandler(new ChannelInitializer<SocketChannel>() { // (4)
@Override
public void initChannel(SocketChannel ch) throws Exception {
ch.pipeline().addLast(new DiscardServerHandler());
}
})
.option(ChannelOption.SO_BACKLOG, 128) // (5)
.childOption(ChannelOption.SO_KEEPALIVE, true); // (6)