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