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
都將是一樣的。