一、建立连接和读取数据
当一个请求进来的时候,服务器需要读取数据,这时候,就先进入了NioEventLoop类的run方法中的processSelectedKeys()方法,之后再其processSelectedKey(SelectionKey k, AbstractNioChannel ch)方法中,下面这个方法,用来建立连接和读取数据。
if ((readyOps & (SelectionKey.OP_READ | SelectionKey.OP_ACCEPT)) != 0 || readyOps == 0) {
unsafe.read();
}
unsafe.read()方法,有两个实现类,一个是NioMessageUnsafe in AbstractNioMessageChannel,一个是NioByteUnsafe in AbstractNioByteChannel。其中NioMessageUnsafe是用来处理连接的建立,NioByteUnsafe是用来处理数据的读取。所以一个请求过来,unsafe.read()方法会执行两次,一次是建立连接,一次是读取数据。
二、Netty基本组件
NioEventLoop:监听客户端连接,处理客户端的读写。
Channel:简单地对一个连接的封装,在这个连接的封装里面,可以进行数据的读写。
Pipeline:逻辑处理链,每一个逻辑处理链的逻辑就是ChannelHandler。每一个逻辑处理都是针对ByteBuf来操作的。