netty实战 第四章
传输API
传输 API 的核心是 interface Channel,它被用于所有的 I/O 操作。

每个 Channel 都将会被分配一个 ChannelPipeline 和 ChannelConfig;ChannelConfig 包含了该 Channel 的所有配置设置,并且支持热更新。
为了保证执行顺序,将Channel继承java.lang.Comparable接口。如果两个不同的 Channel 实例都返回了相同的hashCode,那么 AbstractChannel的compareTo()方法将会抛出一个Error。
ChannelPipeline储存所有应用于入站和出站数据以及事件的ChannelHandler实例,这些 ChannelHandler实现了应用程序用于处理状态变化以及数据处理的逻辑。
ChannelHandler 的典型用途包括:
- 将数据从一种格式转换为另一种格式;
- 提供异常的通知;
- 提供 Channel 变为活动的或者非活动的通知;
- 提供当 Channel 注册到 EventLoop 或者从 EventLoop 注销时的通知;
- 提供有关用户自定义事件的通知

NIO——非阻塞 I/O
NIO 提供了一个所有 I/O 操作的全异步的实现。它利用了自 NIO 子系统被引入 JDK 1.4 时便可用的基于选择器的 API。
选择器背后的基本概念是充当一个注册表,在那里你将可以请求在 Channel 的状态发生变化时得到通知。可能的状态变化有:
- Channel 已被接受并且就绪;
- Channel 连接已经完成;
- Channel 有已经就绪的可供读取的数据;
- Channel 可用于写数据。
选择器运行在一个检查状态变化并对其做出相应响应的线程上,在应用程序对状态的改变做出响应之后,选择器将会被重置,并将重复这个过程。


浙公网安备 33010602011771号