我打算在即将开展的项目中使用Netty.该项目将充当客户端和服务器.特别是它将建立和维护与各种服务器的许多连接,同时为其自己的客户提供服务.
现在,NioServerSocketChannelFactory的文档公平地指定了服务器端的线程模型 - 每个绑定的监听端口在整个过程中都需要专用的boss线程,而连接的客户端将在工作线程上以非阻塞的方式处理.具体来说,一个工作线程将能够处理多个连接的客户端.
但是,NioClientSocketChannelFactory的文档不太具体.这似乎也利用了boss和worker线程.但是,文档说明:
一个NioClientSocketChannelFactory有一个boss线程.它根据请求进行连接尝试.一旦连接尝试成功,boss线程就将连接的Channel传递给NioClientSocketChannelFactory管理的其中一个工作线程.
工作线程似乎也以与服务器案例相同的方式运行.
我的问题是,这是否意味着从我的程序到外部服务器的每个连接都会有一个专用的boss线程?如果我建立数百或数千个此类连接,这将如何扩展?
作为旁注.重新使用单个Executor(缓存线程池)作为ChannelFactory 的bossExecutor和workerExecutor是否有任何不良副作用?那么在不同的客户端和/或服务器ChannelFactory实例之间重新使用呢?这里有一些讨论,但我没有找到足够具体的答案.任何人都可以详细说明这个吗?