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实战》;

  • 相关阅读:
    easyui tree 搜索
    easyui combotree不让父级选中
    jquery设置按钮disabled
    JavaScript中清空数组的三种方式
    JavaScript 与 PHP 的语法区别
    URL参数转换对象
    easyui form validate总是返回false原因
    jquery文字填写自动高度
    SQL Server 附加数据库提示5120错误
    jQuery – 鼠标经过(hover)事件的延时处理
  • 原文地址:https://www.cnblogs.com/coder-zyc/p/14402282.html
Copyright © 2011-2022 走看看