1.1 AbstractChannel构造
通道是Netty的核心概念之一,代表网络连接,由它负责同对端进行网络通信,既可以写入数据到对端,也可以从对端读取数据。
Netty通道的抽象类AbstractChannel的构造函数如下:
private final DefaultChannelPipeline pipeline;
private final Channel parent;
protected AbstractChannel(Channel parent) {
this.parent = parent; // 父通道
id = newId();
// 新建一个底层的NIO 通道,完成实际的IO操作
unsafe = newUnsafe();
//新建一条通道流水线
pipeline = newChannelPipeline();
}
复制代码
-
newUnsafe方法是具体的子类中实现,是个抽象方法
-
AbstractChannel内部有一个pipeline属性,表示处理器的流水线。Netty在对通道进行初始化的时候,将pipeline属性初始化为DefaultChannelPipeline的实例。表明每个通道都拥有一条ChannelPipeline处理器流水线。
AbstractChannel内部有一个parent父通道属性,保持通道的父通道。
- 对于连接监听通道(如NioServerSocketChannel)来说,其parent属性的值为null;
public NioServerSocketChannel(ServerSocketChannel channel) {
// parent穿了一个null
super(null, channel, SelectionKey.OP_ACCEPT);
config = new NioServerSocketChann