一. 传输API

1. 核心是Channel接口,用于所有的IO操作;

2. 每个Channel都会分配一个ChannelPipeline和ChannelConfig,ChannelConfig包含了所有配置,支持热更新;

3. 为保证Channel顺序声明为java.lang.Comparable的一个子接口;

4. eventLoop() 返回分配给Channel的EventLoop;

5. pipeline() 返回分配给Channel的ChannelPipeline;

6. isActive() 如果是活动的返回true;

7. localAddress() 返回本地的SocketAddress;

8. remoteAddress() 返回远程的SocketAddress;

9. write() 将数据写到远程节点,数据将被传递给ChannelPipeline并且排队直到被flush;

10. flush() 将之前写的数据冲刷到底层传输;

11. writeAndFlush() 等于调用write() 后直接调用flush();

二. 内置的传输

1. NIO

使用java.nio.channels包作为基础,基于选择器的方式;

选择器相当于一个注册表,可以请求在Channel的状态发生变化时得到通知;

选择器运行在一个检查状态变化并做出响应的线程上,响应后将被重置,重复这个过程;

2. Epoll

用于Linux的本地非阻塞传输;

3. OIO

利用SO_TIMEOUT这个Socket标志,如果操作在指定时间没有完成,Netty将捕获SocketTimeout Exception,在EventLoop下一次运行时将再次尝试;

4. Local

用于在同一个JVM中运行的客户端和服务器直接的异步通信;

5. Embedded

将一组ChannelHandler作为帮助器类嵌入到其他的ChannelHandler内部;

扩展一个ChannelHandler的同时又不需要修改其内部代码;