一、基础
1.核心对象的对应关系:
Socket--channel--ChannelPipeline--ChannelHandlers(多个ChannelHandler)
即一个socket对应一个channel,一个channel对应一个channelPipeline,一个channelPipeline包会含多个channelHandler。
2.channelHandler
2.1 由于channelhandler执行类似于链式,只有当上一个channelhandler执行完且调用fireXXXX后才会执行下一个channelhandler。
2.2 执行顺序:
以当前主体为中心,接收到信息处理时是由第一个InBount开始执行。处理完接受到的信息返回数据时,由最后一个OutBount开始,例如:
protected void initChannel(SocketChannel ch) throws Exception {
ch.pipeline().addLast(new ChannelOutboundHandlerAdapter1());//服务端返回客户端时,对response编码--out
ch.pipeline().addLast(new ChannelInboundHandlerAdapter2());//服务端接到请求时,对request解码--in
ch.pipeline().addLast(new ChannelInboundHandlerAdapter3());//服务端处理具体业务--in
ch.pipeline().addLast(new ChannelOutboundHandlerAdapter4());//服务端返回客户端时,对response编码--out
}
以上为例,接受到数据时执行ChannelInboundHandlerAdapter的顺序为2、3;返回结果时执行ChannelOutboundHandlerAdapter的
顺序为4、1 。