Netty的基本组件包括Channel
、ChannelHandler
、ChannelPipeline
和EventLoop
。其中,Channel
可以看做是一个连接(相当于一个Socket),在其上会有传入和传出的数据。Netty使用事件来通知状态的改变或者操作的状态,比如连接到远程主机、对方发送过来数据等等,而ChannelHandler
就是用来处理这些事件的组件,在ChannelHandler
中实现相应的函数,这样等到事件发生时Netty就会调用对应该事件的函数,而我们就是在这些函数里面编写程序的逻辑。实际上用于一个Channel
上事件的不止是一个ChannelHandler
,而是使用了一个由多个ChannelHandler
的ChannelPipeline
来处理,类似于设计模式中的责任链模式。ChannelHandler
可以分成ChannelInboundHandler
和ChannelOutboundHandler
接口,分别用于处理流入和流出的数据,而不会影响到对应不是自己流向的数据。
EventLoop
用于处理Netty的各种事件循环,一个EventLoop
只会绑定到一个Thread
上,而一个Channel
始终也只会使用一个EventLoop
来处理上面的事件,所以Channel
是线程安全的,不用采取一些同步措施。在非阻塞传输(NIO和AIO)方式下,EventLoopGroup
为每个新创建的Channel
分配一个EventLoop
,不过一个EventLoop
可能对应多个Channel
(阻塞传输是一对一),所以对于所有在这个EventLoop
上的Channel
来说,它们的ThreadLocal
都将是一样的。