ChannelHandler,ChannelPipeline和ChannelHandlerContext

一. 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移出;

猜你喜欢

转载自www.cnblogs.com/bbbbs/p/12528825.html