Netty 中的一些重要接口以及他们之间的关系

Netty 中的一些重要接口以及他们之间的关系

薛定谔的汪

今天总结下 Netty 中几个很重要的接口,在学习时缕清楚他们之间的关系,自然对 Netty 的流程也就更清晰了。

主要的接口有ChannelHandler、ChannelPipeline、ChannelHandlerContext等。

ChannelHandler

ChannelHandler 继承关系图:

Netty是一个基于事件通知的异步通信框架,ChannelHandler就是用来处理各种事件的处理器,Netty 事件可分为 InBound(入站),OutBound(出站),入站和出站是相对而言的,如:相对于服务器来说,客户端至服务器的数据称作入站,反之出站。

Nety 中的 Handler 执行是有先后顺序的,一个个 Handler 组成了一条链,就像 Servlet 中的过滤器链一样。我们还可以自定义 Handler,用来处理自己的逻辑业务。

自定义Handler,用的最多的是继承 ChannelInBoundHandlerAdapter 和 ChannelOutBoundHandlerAdapter

或者 SimpleChannleInboundHandler,SimpleChannleInboundHandler 的好处是在确定消息的类型后以泛型的形式直接使用,而且会自动释放消息。

ChannelPipeline

ChannelPipeline 是 Netty 抽象出来的概念,我的理解是,在 每个 Channel 中,都有这么一条管道(ChannelPipeline),所有的数据就像水流一样在这条管道中传输,这个管道内有一个个 ChannelHandler 对这个数据流按顺序进行层层处理,我们添加 ChannelHandler 至ChannelPipeline 时,需要先获得 Channel,通过 Channel 获得 ChannelPipeline,然后调用 ChannelPipeline 的 API 即可(最常用的是 addLast 方法)。

当客户端第一次连接至服务端时,会创建一个新通道 Channel,每创建一个新通道Channel,就会创建一个ChannelPipeline附加至 Channel,Channel 与 ChannelPipeLine 的绑定是永久的。

ChannelPipeLine是一个保存一个个 ChannelHandler 的集合。

ChannelHandlerContext

每个 ChannelHandler被添加至ChannelPipeline 后,都会创建一个 ChannelHandlerContext 并与 ChannelHandler 绑定,ChannelHandlerContext的功能主要是让与自己绑定的 ChannelHandler 与其他的 ChannelHandler 交互,因为 ChannelHandler 是链式执行的。

三者关系图

  • Title: Netty 中的一些重要接口以及他们之间的关系
  • Author: 薛定谔的汪
  • Created at : 2018-09-04 18:01:54
  • Updated at : 2023-11-17 19:37:37
  • Link: https://www.zhengyk.cn/2018/09/04/netty/netty-interfaces/
  • License: This work is licensed under CC BY-NC-SA 4.0.
On this page
Netty 中的一些重要接口以及他们之间的关系