客户端的 Netty 4.x NioEventLoopGroup - 线程生命周期和使用
Netty 4.x NioEventLoopGroup for Client - Thread Lifecycle and Usage
我们有一个基于 4.x
的 Netty client/server
客户端将建立到服务器的主通道,并在此单一连接上来回通信。
我想从客户端的角度更好地理解NioEventLoopGroup线程的用法。
我的设置有非常基本的管道。 SSLHandler、编码器、解码器、消息处理程序
Client:本来以为线程是用来处理通过管道传入的数据和传出的数据的。但是,我强制我的客户端只有 1 个线程,并在 channelRead after 中添加了一个睡眠,我提交给执行程序服务(单独的线程)来处理传入的消息,而不是在 channelRead 中这样做。该外部执行程序作业完成后将写入数据作为对数据进入的同一通道的回复。直到睡眠结束后服务器才会收到回复,这是我所期望的。但是我随后将客户端线程增加到 2。运行 同样的测试和服务器直到 30 秒后仍然没有得到回复。为了验证我在作业中添加了系统输出,因为它写了对甚至在睡觉之前输出的通道的回复。我希望第二个线程启动并处理来自作业的外发回复。因此,似乎一个客户端线程用于给定 connection/channel。这准确吗?
您所看到的是预期的。每个 Channel
都“绑定”到一个 EventLoop
,后者又绑定到一个 Thread
。所以不管你有多少个 EventLoop
,一个 Channel
只能由同一个 EventLoop
处理整个 life-time
我们有一个基于 4.x
的 Netty client/server客户端将建立到服务器的主通道,并在此单一连接上来回通信。
我想从客户端的角度更好地理解NioEventLoopGroup线程的用法。
我的设置有非常基本的管道。 SSLHandler、编码器、解码器、消息处理程序
Client:本来以为线程是用来处理通过管道传入的数据和传出的数据的。但是,我强制我的客户端只有 1 个线程,并在 channelRead after 中添加了一个睡眠,我提交给执行程序服务(单独的线程)来处理传入的消息,而不是在 channelRead 中这样做。该外部执行程序作业完成后将写入数据作为对数据进入的同一通道的回复。直到睡眠结束后服务器才会收到回复,这是我所期望的。但是我随后将客户端线程增加到 2。运行 同样的测试和服务器直到 30 秒后仍然没有得到回复。为了验证我在作业中添加了系统输出,因为它写了对甚至在睡觉之前输出的通道的回复。我希望第二个线程启动并处理来自作业的外发回复。因此,似乎一个客户端线程用于给定 connection/channel。这准确吗?
您所看到的是预期的。每个 Channel
都“绑定”到一个 EventLoop
,后者又绑定到一个 Thread
。所以不管你有多少个 EventLoop
,一个 Channel
只能由同一个 EventLoop
处理整个 life-time