是的你可以。这是一个例子:
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);
请注意,您不应ChannelFactory
为您创建的每个引导实例创建一个新实例。你应该重用工厂。
在不同的连接之间共享工作池意味着客户端套接字和服务器套接字接受的套接字可以由属于工作池的同一 I/O 线程处理。假设这些通道的处理程序在被 I/O 线程调用时不会花费太多时间,这通常是一个好主意。
但是,如果某种类型的通道的处理程序比其他通道的处理程序花费更多的时间,您可能会观察到那些没有尽快轮到他们的通道的延迟响应。可以通过确保所有处理程序不阻塞并尽快完成其工作并快速返回来解决此问题。