Channel相关

Channel

生命周期

状态 描述
ChannelUnregistered Channel已经被创建,但还未注册到EventLoop
ChannelRegistered Channel已经被注册到了EventLoop
ChannelActive Channel处于活动状态(已经连接到它的远程节点)。它现在可以接收和发送数据了
ChannelInactive Channel没有连接到远程节点

ChannelHandler

生命周期

类型 描述
handlerAdded 当把ChannelHandler添加到ChannelPipeline中时被调用
handlerRemoved 当从ChannelPipeline中移除ChannelHandler时被调用
exceptionCaught 当处理过程中在ChannelPipeline中有错误产生时被调用

ChannelInboundHandler

类型 描述
channelRegistered Channel已经注册到它的EventLoop并且能够处理I/O时被调用
channelUnregistered Channel从它的EventLoop注销并且无法处理任何I/O时被调用
channelActive Channel处于活动状态时被调用;Channel已经连接/绑定并且已经就绪channelInactive
channelReadComplete Channel上的一个读操作完成时被调用
channelRead 当从Channel读取数据时被调用
ChannelWritabilityChanged Channel的可写状态发生改变时被调用。用户可以确保写操作不会完成得太快(以避免发生OutOfMemoryError)或者可以在Channel变为再次可写时恢复写入。可以通过调用ChannelisWritable()方法来检测Channel的可写性。与可写性相关的阈值可以通过Channel.config(). setWriteHighWaterMark()Channel.config().setWriteLowWaterMark()方法来设置
userEventTriggered ChannelnboundHandler.fireUserEventTriggered()方法被调用时被调用,因为一个POJO被传经了ChannelPipeline

需要注意的是 在channelRead方法里面需要显式释放ByteBuf

@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) {  ← --  丢弃已接收的消息
  ReferenceCountUtil.release(msg);
}

SimpleChannelInboundHandler 会自动释放资源

ChannelOutboundHandler

类型 描述
bind(ChannelHandlerContext,SocketAddress,ChannelPromise) 当请求将Channel绑定到本地地址时被调用
connect(ChannelHandlerContext,SocketAddress,SocketAddress,ChannelPromise) 当请求将Channel连接到远程节点时被调用
disconnect(ChannelHandlerContext,ChannelPromise) 当请求将Channel从远程节点断开时被调用
close(ChannelHandlerContext,ChannelPromise) 当请求关闭Channel时被调用
deregister(ChannelHandlerContext,ChannelPromise) 当请求将Channel从它的EventLoop注销时被调用
read(ChannelHandlerContext) 当请求从Channel读取更多的数据时被调用
flush(ChannelHandlerContext) 当请求通过Channel将入队数据冲刷到远程节点时被调用
write(ChannelHandlerContext,Object,<br>``ChannelPromise) 当请求通过Channel将数据写到远程节点时被调用

ChannelHandlerAdapter

批注 2020-07-08 105137

ResourceLeakDetector

通过分配1%的采样来检测内存泄漏

ChannelPipeline

拦截流经 Channel 的入站和出站时间的ChannelHandler 示例链

修改

名称 描述
addFirst addBefore addAfter addLast 将一个ChannelHandler添加到ChannelPipeline
remove 将一个ChannelHandlerChannelPipeline中移除
replace ChannelPipeline中的一个ChannelHandler替换为另一个Channel- Handler

访问 ChannelHandler

名称 描述
get 通过类型或者名称返回ChannelHandler
context 返回和ChannelHandler绑定的ChannelHandlerContext
names 返回ChannelPipeline中所有ChannelHandler的名称

出入站事件

ChannelHandlerContext

代表了 ChannelHandler 与 ChannelPipeline 之间的关联

这个类提供的一些访问在 Channel 与 ChannelPipeline 上也有

使用该类的目的是产生更短的事件流以及为了更高的性能