zoukankan      html  css  js  c++  java
  • Netty ChannelHandler组件作用

    ChannelHandler是一个接口,负责对I/O事件或者I/O操作进行拦截和处理,它可以选择性地拦截和处理自己感兴趣地事件,也可以透传和终止事件,并将其转发到其ChannelPipeline(业务处理链)中的下一个处理程序(Handler);

    基于ChannelHandler接口,用户可以方便地进行业务逻辑定制,例如打印日志,统一封装异常信息,性能统计和消息编码等;

    ChannelHandler继承体系图如下:

    ChannelHandler的生命周期如下图:

    ChannelInboundHandler 用于处理入站I/O事件,处理输入数据和Channel状态类型改变;对于适配器有ChannelInboundHandlerAdapter;

    ChannelOutboundHandler 用于处理出站I/O事件,处理输出数据;对于适配器有ChannelOutboundHandlerAdapter;

    ChannelDuplexHandler 用于处理入站和出站事件;

    对于大多数ChannelHandler会选择性地拦截和处理某个或者某些事件,其他的事件会忽略,由下一个ChannelHandler进行拦截和处理;这样会导致一个问题,用户ChannelHandler必须要实现ChannelHandler的所有接口,包括它不关心的那些事件处理的接口,这会导致用户代码的臃肿,可维护性变差;为了解决这个问题,Netty提供了ChannelHandlerAdapter基类,它的所有接口实现都是事件透传的,如果用户ChannelHandler关心某个事件,只需要覆盖ChannelHandlerAdapter对应的方法即可,对于不关心的方法,用户可以直接继承使用父类的方法,子类的代码可以变得简洁和清晰;

    ChannelHandler支持的注解

    • Sharable:多个ChannelPipeline共用同一个ChannelHandler;

      io.netty.channel.ChannelHandlerAdapter#isSharable,isSharable(),如果其对应的实现被标注为 Sharable, 那么这个方法将返回 true, 表示它可以被添加到多个 ChannelPipeline中;

    下面截图摘至《Netty实战》;

  • 相关阅读:
    小村系列之十八:幸福的桥
    小村系列之十六:改革的石头
    获取<select>,<radio>,<checkbox>中未被选中的value值和被选中的value值
    display:inline-block,block,inline的区别与用法
    Java中List Set Map集合的遍历
    C#自定义List类
    C#获取文件和文件夹大小
    C# winform带进度条的图片下载
    C#委托的详细使用
    asp.net cookie和session的详细使用
  • 原文地址:https://www.cnblogs.com/coder-zyc/p/14402282.html
Copyright © 2011-2022 走看看