2014-02-10 4 views
4

Я хотел бы повторно использовать 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) 

ответ

4

в Нетти 5, NioEventLoopGroup поставляется с конструктором, который принимает исполнитель в качестве параметра:

EventLoopGroup bossGroup = new NioEventLoopGroup(nThreads, yourExecutor); 

, но я не уверен, что это так в нетто 4

Смежные вопросы