当前位置: 首页 > news >正文

Netty之通道生命周期

Netty通道的生命周期学习记录

ChannelInboundHandler入站生命周期

  为了研究入站的生命周期,我们搞一个小demo。定义入站处理器InboundHandlerDemo,这个类继承ChannelInboundHandlerAdapter。将这个处理器添加到通道pipeline中。

public class InboundHandlerDemo extends ChannelInboundHandlerAdapter
{@Overridepublic void handlerAdded(ChannelHandlerContext ctx)…{Logger.info("被调用:handlerAdded()");super.handlerAdded(ctx);}@Overridepublic void channelRegistered(ChannelHandlerContext ctx)…{Logger.info("被调用:channelRegistered()");super.channelRegistered(ctx);}@Overridepublic void channelActive(ChannelHandlerContext ctx)…{Logger.info("被调用:channelActive()");super.channelActive(ctx);}@Overridepublic void channelRead(ChannelHandlerContext ctx, Object
msg)…{Logger.info("被调用:channelRead()");super.channelRead(ctx, msg);}@Overridepublic void channelReadComplete(ChannelHandlerContext ctx)…
{Logger.info("被调用:channelReadComplete()");super.channelReadComplete(ctx);}@Overridepublic void channelInactive(ChannelHandlerContext ctx)…{Logger.info("被调用:channelInactive()");super.channelInactive(ctx);}@Overridepublic void channelUnregistered(ChannelHandlerContext ctx)…
{Logger.info("被调用: channelUnregistered()");super.channelUnregistered(ctx);}@Overridepublic void handlerRemoved(ChannelHandlerContext ctx)…{Logger.info("被调用:handlerRemoved()");super.handlerRemoved(ctx);}
}

  我们通过EmbeddedChannel嵌入式通道测试。

public class InboundHandlerDemoTest {@Testpublic void testInHandlerLifeCircle() {final InboundHandlerDemo handler= new InboundHandlerDemo ();//初始化处理器ChannelInitializer i = new ChannelInitializer<EmbeddedChannel>() {protected void initChannel(EmbeddedChannel ch) {ch.pipeline().addLast(handler);}};//创建嵌入式通道EmbeddedChannel channel = new EmbeddedChannel(i);ByteBuf buf = Unpooled.buffer();buf.writeInt(1);//模拟入站,向嵌入式通道写一个入站数据包channel.writeInbound(buf);channel.flush();//模拟入站,再写一个入站数据包channel.writeInbound(buf);channel.flush();//通道关闭channel.close();}
}

  输出结果,如下:handlerAdded()→channelRegistered()→channelActive()→数据传输的入站回调(channelRead()→channelReadComplete())→channelInactive()→channelUnregistered()→handlerRemoved()

// 当业务处理器被加入到pipeline后,此方法将被回调。也就是在ch.pipeline().addLast(handler)
[main|handlerAdded]:被调用:handlerAdded()// 当通道成功绑定一个NioEventLoop反应器后。
[main|channelRegistered]:被调用:channelRegistered()// 当通道激活成功后。激活成功是指所有的业务处理器添加成功,注册的异步任务完成,并且与NioEventLoop反应器绑定的异步任务完成。
[main|channelActive]:被调用:channelActive()[main|channelRead]:被调用:channelRead()
[main|channelReadComplete]:被调用:channelReadComplete()
[main|channelRead]:被调用:channelRead()
[main|channelReadComplete]:被调用:channelReadComplete()// 当前通道的底层来连接已经不是ESTABLISH状态或者底层连接已经关闭时,会首先回调所有业务处理的ChannelInactive方法。
[main|channelInactive]:被调用:channelInactive()//当前通道和NioEventLoop反应器解除绑定,移除掉对这条通道的事件处理之后,回调所有业务处理器的
channelUnregistered ()方法
[main|channelUnregistered]:被调用: channelUnregistered()// netty会移除掉通道上所有的业务处理器,并且回调所有业务处理器的handlerRemoved方法。
[main|handlerRemoved]:被调用:handlerRemoved()

http://www.mrgr.cn/news/52894.html

相关文章:

  • web网页---新浪网页面
  • 【独家探微】探寻大语言模型潜能!26 条核心提示词原则微观解析
  • 【卫星图像处理】卫星光照处理
  • 盘古信息:智能仓储管理赋能企业降本增效
  • 居家好空气也能定制?约克VRF中央空调智慧演绎极致舒适家
  • 基于51单片机的指纹锁设计
  • 头歌——人工智能(盲目搜索算法)
  • 公司域名邮箱注册方法:烽火邮箱优势特点?
  • 「漏洞复现」英飞达医学影像存档与通信系统 WebUserLogin.asmx 信息泄露漏洞
  • Android Camera2在textureView中的预览和拍照
  • 用Midjourney搞怪迈克尔杰克逊的Do You Remember The Time
  • HTML5活动报名页面场景秀源码系统 各种场景适用随心选择 带完整的安装代码包以及搭建部署教程
  • verdi波形配置
  • 酒店电子门牌在酒店管理中扮演的角色
  • rt thread studio中调用math.h里的函数找不到
  • c++算法第3天
  • 高效构建与文档生成:用Java、Spring Boot和Swagger打造RESTful API
  • 【最新华为OD机试E卷-支持在线评测】字符统计及重排(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)
  • 中国雕刻、
  • 没有公司社保之后,如果需要医院报销,这么做可以轻松获得医疗保险报销