Netty重点——核心组件下篇(十三)

ChannelHandler及其实现类

  1. ChannelHandler是一个接口,处理IO事件或拦截IO操作,并将其转发到其ChannelPipeline(业务处理链)中的下一个处理程序。
  2. ChannelHandler本身并没有提供很多方法,因为这个接口有许多的方法需要实现,方便使用期间,可以维承它的子类
  3. ChannelHandler实现图
  4. 我们经常需要自定义一个Hander类去继承ChannellInboundHandlerAdapter,然后通过重写相应方法实现业务逻辑,需重写方法如下

Pipeline和ChannelPipeline

  1. ChannelPipeline是一个Handler的集合,它负责处理和拦截inbound或者outbound的事件和操作,相当于一个贯穿Netty的链。(也可以这样理解: ChannelPipeline是保存ChannelHandler的List,用于处理或拦截Channel的入站事件和出站操作)
  2. ChannelPipeline实现了一种高级形式的拦截过滤器模式,使用户可以完全控制事件的处理方式,以及Chamnel中各个的ChannelHandler如何相互交互
  3. 在 Netty 中每个Channel都有且仅有一个ChannelPipeline与之对应,它们的组成关系如下
    1. 一个Channel包含了一个ChannelPipeline,而ChannelPipeline中又维护了一个由ChannelHandlerContext组成的双向链表,并且每个ChannelHandlerContext中又关联着一个ChannelHandler
    2. 入站事件和出站事件在一个双向链表中,入站事件会从链表head往后传递到最后一个入站的handler,出站事件会从链表tail往前传递到最前一个出站的handler,两种类型的handler互不干扰
  4. 常用方法

    1. ChannelPipeline addFirst(ChannelHandler.. handlers),把一个业务处理类(handler)添加到链中的第一个位置
    2. ChannelPipeline addlast(ChannelHandler...handlers),把一个业务处理类(handler)添加到链中的最后一个位置

ChannelHandlerContext

  1. 保存Channel相关的所有上下文信息,同时关联一个ChannelHandler对象
  2. 即ChannelHandlerContext中包含一个具体的事件处理器ChannelHandler,同时ChannelHandlerContext中也绑定了对应的pipeline和Channel的信息,方便对ChannelHandler进行调用
  3. 常用方法
    • ChannelFuture close(),关闭通道
    • ChannelOutboundInvoker flush(),刷新
    • ChannelFuture writeAndFlush(Object msg),将数据写到ChannelPipeline 中当前ChannelHandler的下一个ChannelHandler开始处理(出站)

 ChannelOption

  1. Netty在创建Channel实例后,都需要设置ChannelOption参数。
  2. ChannelOption参数如下:
    • ChannelOption.SO_BACKLOG对应TCP/IP协议listen函数中的backlog参数,用来初始化服务器可连接队列大小。服务端处理客户端连接请求是顺序处理的,所以同一时间只能处理一个客户端连接。多个客户端来的时候,服务端将不能处理的客户端连接请求放在队列中等待处理,backlog 参数指定了队列的大小。
    • ChannelOption.SO_KEEPALIVE一直保持连接活动状态

  • 22
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值