侧边栏壁纸
  • 累计撰写 781 篇文章
  • 累计创建 1 个标签
  • 累计收到 1 条评论
标签搜索

PipeLine

Dettan
2021-04-10 / 0 评论 / 0 点赞 / 116 阅读 / 1,614 字
温馨提示:
本文最后更新于 2022-04-30,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
pipeline字面意思就是管道(水管),管道里面的水就是你的数据(NIO里面就是ByteBuf),我们需要阀(tomcat中对应Valve,netty中对应ChannelHandler)对数据进行一些处理,例如认证,授权,安全检验等。InBound就去Decode,OutBound就去Encode。最终把结果写进SocketChannel。

避免一大堆if else 语句. Pipeline的作用就是组织不同处理器,在netty里就相当于它的大动脉,一个请求在生命周期内都是在Pipeline上的不同位置扭转的,这样既保证了逻辑的清晰,又使代码变得优雅。

*                                        {@link ChannelHandlerContext}
*                                                      |
*  +---------------------------------------------------+---------------+
*  |                           ChannelPipeline         |               |
*  |                                                  \|/              |
*  |    +----------------------------------------------+----------+    |
*  |    |                   ChannelHandler  N                     |    |
*  |    +----------+-----------------------------------+----------+    |
*  |              /|\                                  |               |
*  |               |                                  \|/              |
*  |    +----------+-----------------------------------+----------+    |
*  |    |                   ChannelHandler N-1                    |    |
*  |    +----------+-----------------------------------+----------+    |
*  |              /|\                                  .               |
*  |               .                                   .               |
*  | ChannelHandlerContext.fireIN_EVT() ChannelHandlerContext.OUT_EVT()|
*  |          [method call]                      [method call]         |
*  |               .                                   .               |
*  |               .                                  \|/              |
*  |    +----------+-----------------------------------+----------+    |
*  |    |                   ChannelHandler  2                     |    |
*  |    +----------+-----------------------------------+----------+    |
*  |              /|\                                  |               |
*  |               |                                  \|/              |
*  |    +----------+-----------------------------------+----------+    |
*  |    |                   ChannelHandler  1                     |    |
*  |    +----------+-----------------------------------+----------+    |
*  |              /|\                                  |               |
*  +---------------+-----------------------------------+---------------+
*                  |                                  \|/
*  +---------------+-----------------------------------+---------------+
*  |               |                                   |               |
*  |       [ Socket.read() ]                    [ Socket.write() ]     |
*  |                                                                   |
*  |  Netty Internal I/O Threads (Transport Implementation)            |
*  +-----------------------------------------------------------------
0

评论区