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

  • 相关阅读:
    iOS Xcode制作模板类
    图片变形的抗锯齿处理方法
    iOS 9 分屏多任务:入门(中文版)
    iOS应用国际化教程(2014版)
    GitHub Top 100 简介
    iOS @synthesize var = _var 变量前置下划线解释
    @synthesize obj=_obj的意义详解 @property和@synthesize
    git 教程(14)--解决冲突
    git 教程(13)--创建与合并分支
    C++基础知识(3)---new 和 delete
  • 原文地址:https://www.cnblogs.com/coder-zyc/p/14402282.html
Copyright © 2011-2022 走看看