我打算在即将开始的项目中使用Netty。该项目将作为客户端和服务器同时存在。尤其重要的是,它将在同时服务自身客户端的同时与多个服务器建立和维护许多连接。
现在,NioServerSocketChannelFactory 的文档相当明确地规定了服务器端的线程模型 - 每个绑定侦听端口都需要一个专用的boss线程,而连接的客户端将在worker线程上以非阻塞方式处理。具体来说,一个工作线程将能够处理多个已连接的客户端。
然而,NioClientSocketChannelFactory 的文档则不是很具体。它似乎也同时利用了boss和worker线程。但是文档说明:
一个NioClientSocketChannelFactory有一个boss线程。它会在请求时进行连接尝试。一旦连接尝试成功,boss线程将把连接的通道传递给NioClientSocketChannelFactory管理的其中一个worker线程。
工作线程似乎也与服务器端的情况相同。
我的问题是,这是否意味着对于我程序到外部服务器的每个连接都会有一个专用的boss线程?如果我建立数百个或数千个这样的连接,它将如何扩展?
顺便说一下,如果将单个Executor(缓存线程池)同时用作bossExecutor和workerExecutor以及ChannelFactory,是否会有任何负面影响?在不同的客户端和/或服务器ChannelFactory实例之间也是如此吗? 这里有些讨论,但我觉得那些答案不够具体。有人可以详细说明吗?