问题描述
我们有一个基于4.x的Netty客户/服务器
客户端将建立到服务器的主通道,并在此单个连接上来回通信。
我想从客户端的角度更好地理解NioEventLoopGroup线程的用法。
我的设置具有非常基本的管道。 SSLHandler,编码器,解码器,MessageHandler
客户端:我本来以为该线程用于通过管道处理传入数据和传出数据。但是,我强迫客户端只使用1个线程,并在之后之后在channelRead内添加了睡眠。我提交给执行服务(单独的线程)来处理传入的消息,而不是在channelRead内进行处理。该外部执行程序作业完成后,将写入数据作为对数据进入同一通道的答复。服务器直到睡眠完成后才得到答复,这正是我所期望的。但是,然后我将客户端线程增加到了2。运行相同的测试,直到30秒后服务器仍然没有得到答复。为了验证我在将答复写到甚至在睡觉之前输出的通道后在作业中添加了系统输出。我希望第二个线程可以启动并处理作业的传出答复。因此,似乎一个客户端线程用于给定的连接/通道。这是正确的吗?
解决方法
所见即所得。每个Channel
被“绑定”到一个EventLoop
,后者被绑定到正好一个Thread
。因此,您拥有多少EventLoop
并不重要,一个Channel
在整个生命周期中只能由相同的EventLoop
处理