一. ChannelHandler
1. Channel的生命周期
ChannelUnregistered 已经被创建但还未注册到EventLoop;
ChannelRegistered 已经注册到EventLoop;
ChannelActive 处于活动状态,可以接受和发送数据;
ChannelInactive 没有连接到远程节点;
当这些状态发送改变时会产生对应的事件,这些事件会被转发给ChannelPipeline中的ChannelHandler;
2. ChannelHandler的生命周期
handlerAdded 当ChannelHandler添加到ChannelPipeline时被调用;
handlerRemoved 当从ChannelPipeline中移除ChannelHandler时被调用;
exceptionCaught 在ChannelPipeline中有错误产生时被调用;
3. ChannelInboundHandler接口
channelRegistered 当channel已经注册并能处理IO时调用;
channelUnregistered 当channel注销并无法处理IO时调用;
channelActive 当channel处于活跃状态时调用;
channelInactive 当channel离开活动状态并且不再连接远程节点时调用;
channelReadComplete 当channel上的一个读操作完成时调用;
channelRead 当从channel读取数据时调用;
channelWritabilityChanged 当channel的可写状态发生改变时调用;
4. ChannelOutboundHandler接口
bind 当请求将channel绑定到本地地址时调用;
connect 当请求将channel绑定到远程节点时调用;
disconnect 当请求将channel从远程节点断开时调用;
close 当请求关闭channel时调用;
deregister 当请求从EventLoop中注销channel时调用;
read 当请求从channel读取更多的数据时调用;
flush 当请求通过channel将入队数据冲刷到远程节点时调用;
write 当请求通过channel将数据写到远程节点时调用;
二. ChannelPipeline
1. 修改ChannelPipeline
通过调用ChannelPipeline的相关方法,ChannelHandler可以添加,删除或替换其他的ChannelHandler,从而实时的修改ChannelPipeline的布局;
addFirst;addBefore;addAfter;addLast;remove;replace;
get 通过类型或名称返回ChannelHandler;
context 返回和ChannelHandler绑定的ChannelHandlerContext;
names 返回ChannelPipeline中所有的ChannelHandler的名称;
2. 触发事件
ChannelPipeline的API公开了用于调用入站和出站操作的附加方法;
三. ChannelHandlerContext
1. 使用
每当有ChannelHandler添加到ChannelPipeline时都会创建ChannelHandlerContext;
主要功能:管理它所关联的ChannelHandler和在同一个ChannelPipeline中的其他ChannelHandler直接的交互;
Channel被绑定到ChannelPipeline,ChannelPipeline相等于一个容器包含了所有的ChannelHandler,当把ChannelHandler添加到ChannelPipeline时,与ChannelHandler对应的ChannelHandlerContext将会被创建;
事件被传递给ChannelPipeline中的第一个ChannelHandler,通过使用与之相关联的ChannelHandlerContext,将事件传递给ChannelPipeline中的下一个ChannelHandler,直到最后一个ChannelHandler,事件从ChannelPipeline移出;
ChannelHandler,ChannelPipeline和ChannelHandlerContext
原文:https://www.cnblogs.com/bbbbs/p/12528825.html