不惑之年的硬件牛人转到软件自学之netty框架(三)ChannleHandler和ChannelPipeline

由于近期开发一个中型的物联项目,带着十来个兄弟从底层硬件到无线局域通信到通用网关到netty高可用框架到spring cloud的后台开发到移动端APP开发到WEB前端的开发整体框架的搭建,虽然很辛苦,但我一直在给兄弟们说我们要三年内在物联行业占有一席之地,期待项目的成功。就因为这样,我写出了这个netty自学框架,虽然也是开始学习,我想通过项目的历练肯定对大家都有用,加油!

      今天是:2018年5月29日          主题:ChannleHandler和ChannelPipeline

       一、Channel的生命周期状态

      1、ChannelUnregistered:Channel已经被创建,但还未注册到EventLoop

      2、ChannelRegistered:Channel已经被注册到了EventLoop

      3、ChannelActive:Channel处于活动状态(已经连接到它的远程节点)

      4、ChannelInactive:Channel没有连接到远程节点

      二、ChannelHandler的生命周期

      1、handlerAdded:当把ChannelHandler添加到ChannelPipeline中时被调用

      2、handlerRemoved:当从ChannelPipeline中移除ChannelHandler时被调用

      3、exceptionCaught:当处理过程中在ChannelPipeline中有错误产生时被调用

     三、Netty定义了下面两个重要的ChannelHandler子接口:

     1、ChannelInboundHandler----处理入站数据以及各种状态变化,其方法如下:

      

    2、ChannelOutboundHandler---处理出站数据并且允许拦截所有的操作,其方法如下:

     

   四、ChannelPipeline接口

   ChannelPipeline是一个拦截流经Channel的入站和出站事件的ChannelHandler实例链。

   

       1、修改ChannelPipeline:ChannelHandler可以通过添加、删除或者替换其他的ChannelHandler来实时地修改ChannelPipeline的布局。ChannelHandler的用于修改ChannelPipeline的方法如下:

       

       2、ChannelPipeline的用于访问ChannelHandler的操作

      

      3、ChannelPipeline的入站操作方法

      

      4、ChannelPipeline的出站操作

       

        5、总结一下:

             ChannelPipeline保存了与Channel想关联的ChannelHandler;

             ChannelPipeline可以根据需要,通过添加或者删除ChannelHandler来动态地修改;

             ChannelPipeline有着丰富的API用以被调用,以响应入站和出站事件。

      五、ChannelHandlerContext接口

      1、ChannelHandlerContext代表了ChannelHandler和ChannelPipeline之间的关联,每当有ChannelHandler添加到ChannelPipeline中时,都会创建ChannelHandlerContext。ChannelHandlerContext的主要功能是管理它所关联的ChannelHandler和在同一个ChannelPipeline中的其他ChannelHandler之间的交互。

       2、ChannelHandlerContext的API

       

      

     3、当使用ChannelHandlerContext的API的时候,请牢记以下两点:

          ChannelHandlerContext和ChannelHandler之间的关联(绑定)是永远不会改变的,所以缓存对它的应用是安全的;

          ChannelHandlerContext的方法将产生更短的事件流,应该尽可能地利用这个特性来获得最大的性能。

      4、从ChannelHandlerContext访问Channel

                    ChannelHandlerContext ctx = . .;

                    Channel channel = ctx.channel();        //获取到与ChannelHandlerContext相关联的Channel的引用

                   channel.write(Unpooled.copiedBuffer("Netty in Action",CharsetUitl.UTF_8));   //通过Channel写入缓冲区

      5、通过ChannelHandlerContext访问ChannelPipeline

                  

       ChannelHandlerContext ctx = . .;

       ChannelPipeline pipeline = ctx.pipeline();   //获取到与ChannelHandlerContext相关联的ChannelPipeline的引用

      pipeline.write(Unpooled.copiedBuffer("Netty in Action",CharsetUitl.UTF_8));   //通过ChannelPipeline写入缓冲区

                     

      

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值