如果将这些类结合在一起,可以被认为是Netty网络抽象的代表:
- Channel-Socket
- EventLoop-控制流、多线程处理、并发
-
Channel接口
基本的IO操作如bind()、connect()、read()、write()都依赖于底层网络传输所提供的原语,在基本的JAVA网络编程中,器基本的构造是Socket类,Netty的Channel接口提供的API大大降低了直接使用Socket类的复杂性。
EventLoop接口
eventLoop定义了Netty的核心抽象,用于处理连接的生命周期中所发生的事件。
Channel、EventLoop、Thread、EventLoopGroup之间的关系说明: 一个EventLoopGroup包含一个或者多个EventLoop
- 一个EventLoop在它的生命周期内只和一个Thread绑定
- 所有由EventLoop处理的IO事件都将在它专有的Thread上被处理
- 一个Channel在它的生命周期内只注册于一个EventLoop
- 一个EventLoop可能会被分配给一个或多个Channel
一个给定的Channel的IO操作都是由相同的Thread执行的。
ChannelFuture接口
Netty中的IO操作都是异步的,因为一个操作可能不会立即返回,所以需要一种用于在之后的某个时间点确定其结果的方法。为此Netty提供了ChannelFuture接口,其addListender()方法注册一个ChannelFutureListener,以便在某个操作完成时(无论是否成功)得到通知。
可以将ChannelFuture看作是将来要执行的操作的占位符,究竟何时执行无法准确的预测,但是可以肯定的是它肯定会被执行。此外,所有属于同一个Channel的操作都被保证其将以它们被调用的顺序被执行。
