首页 > Web开发 > 详细

Netty ChannelHandler模块作用

时间:2021-02-15 23:29:08      阅读:45      评论:0      收藏:0      [点我收藏+]

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

 

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

技术分享图片

 

Netty ChannelHandler模块作用

原文:https://www.cnblogs.com/coder-zyc/p/14402282.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!