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

  • 相关阅读:
    dataframe字段过长被截断
    sublime text 3安装Anaconda插件之后写python出现白框
    在tkinter中使用matplotlib
    RemoteDisconnected: Remote end closed connection without response
    object of type 'Response' has no len()
    matploylib之热力图
    pycharm格式化python代码快捷键Ctrl+Alt+L失效
    Windows下Redis集群配置
    七牛云--对象存储
    Spring发送邮件
  • 原文地址:https://www.cnblogs.com/coder-zyc/p/14402282.html
Copyright © 2020-2023  润新知