Netty源码阅读入门实战(六)-pipeline

简介: 1 pipeline概述2 pipeline初始化双向链表结构看看其一个实现类基本数据结...

1 pipeline概述

img_e6eb8deeae0b86bd1fad7b81fc1cb921.png

img_35c45c8fd36f906a3da8dd0f15364083.png

2 pipeline初始化

img_cf6f0c6da593862c411c1c254ebf901a.png

img_e80350af7ae749f262826e9c2bf4b0f9.png

img_ecdd8273d6fabb5c65160a7cf05851e3.png

img_dbb111404bec12f8cad42e58da5e35b7.png

img_fbd6c400cb67496eeb5f4f20550feca4.png
双向链表结构

img_bc37ef86a579147b6a4e4dad73549753.png

img_9a9c46dcba919cda1a89a4bf452bfda4.png

img_3b567bfacc1cdb8cff4f3fb0a7c86b72.png

看看其一个实现类


img_8d05304a0c0bfc74bc90a352abbfc68f.png

基本数据结构组件
img_475fa39ee5a7fc86a1229b849cb305f5.png

img_f8207167a66a6dc6586feb9b9155f0dc.png

img_bb8fb2c23db34948475b8472eb19c6ef.png

img_0a9c7ed85265feb4f769f533a10bc5af.png

img_731cb26781d4dc34bea51af716f137ca.png

img_cc1343d2353000c2ef7813e98d31710a.png

img_c0a481f574e1b6f160eccd5d3dac118e.png

3 添加ChannelHandler

先看看用户代码


img_91c7f9feb657fedac58634665fbe5fa9.png

img_60f7f4b7a16546e0ea4d350a59788035.png

img_2110b079d852cf9cecf39831a11309a8.png

img_bc7d31cacd55b86cc325a040015947a3.png

img_4a6273ecb2a485c3f7b69a358398b43d.png

img_54a3392e9a6772d182d7be2d3bf0080e.png

img_c820f76235784771d435d90cba59685f.png

img_8c23c86e2530f9bee5ed7400a9f5eb5a.png

img_bde448289a7b39420d55383684cd88ae.png

img_848e01c973c92adc6f70731c997cbc90.png

img_7f4c3e511e904a6cdacae77b3af2413e.png

img_23dfb7d7584d978433a41ac2cb551dab.png

img_7d9156024463e43166e4ee0577fd4f04.png

img_95d2b3301d74e3c7f327be19990f9846.png

img_92d7e095f43f9b72a8998249acec301d.png

img_c54ae546cb243b5c04eeb02d3f0defe4.png

img_8636f34e260b094a2f9aa54aa74af5be.png

img_6ff73326030e397ec8ba482438cf07cc.png

img_60e69fe637461ed7e404b33619da14f2.png

img_8cc26e6eb89ac099b046516efb5bd9b0.png

img_9b11db6d81d70d7d491a88dadbeffc25.png

img_db6d7e6ba4251217407dafb7c7184429.png
用户方自定义实现即可

img_b0fca44acd2154352a378fb65d700b29.png

4 未下载,失败 ing

6 outBound事件的传播

img_4b6b71e6fc274a5f789169cbf37ada57.png

img_bbe326d41a46c356f63436175d2f4954.png

img_b036fabadb9907334ef936f4a725068e.png

img_4b77b7c6119b4ad1af9aa6a3d2988735.png

img_930fdf8d2814c2b5f8c2850c27a810e5.png

img_77de23740a6f336cc9c44ac14fcd1abd.png

img_766571dcdb54461603ec496090c4d9cb.png

img_41e2d8877a54578d37fc2424b419cfe8.png

img_64fb2f6d33810dc72dbe782e7dcaf83d.png

img_c810e16b82479fd109274e877b350f67.png

img_ca5a8af0d520bd260b57dc636db7d617.png

img_17b2bdc9c08a7202098e05fc45cd1018.png

img_80427df963eba994caacf668e00bcf14.png

img_624a4cc5fe3a0684443fa7a6c54d69e0.png

img_b8b5cce12f4a6c1970c5df5977336e56.png

img_21729f75d4d26f8b2b7363268969611f.png

img_4f80b62280a7df4774569bcb3e8f228c.png

img_923145d8f3119f2b9d4b4948b4f0eda8.png

同理以后的过程


img_d8bdeb7db87c8022807340810653b739.png

7 异常的传播

img_141d776046c76115ddf9310ddbb5650d.png

img_dff1759f55161df7556dc611e8d6c4c5.png

img_5f798af4dd4b49c94b374ed4b919fef8.png

img_1a12d3a90e38b8d9d52cbb0823630446.png

img_1727ed30f2003ddcfb8e0f7dba457070.png

img_bb6fa45757a75f7cca26fe8634e644b5.png

img_4a6008ee4e32b30b4337f59a42eb9698.png

img_d29b986730650d186518b4c624bf0e16.png

img_b346b1959317db55b7a513334f96701a.png
对应 tail 为当前节点的情形

img_80cc87521928ff7a2eabd7086eb48bba.png

最佳实践


img_078d1441a9f27e24d3d5059d80d0adbf.png
在最后定义异常处理器,否则默认是 tail 节点的警告打印信息

img_d755f737bea5d76feb5b660f1c26d104.png
所有异常最终处理位置

8 pipeline总结

img_79cd06967ed9bdf4a7bf0b19011a2ae2.png

img_848afcec7054c99aa5431ce3aa758c75.png

调用 pipeline 添加节点时,netty 会使用 instanceof 关键字判断当前节点是 inboound 还是 outbound 类型,分别用不同的 boolean 类型变量标识


img_01f259667d0d7c5711fef9ce2bc30364.png

inbound 事件类型顺序正相关

outbound 逆相关


img_b171a587718b2516496f8e19addc7ecf.png

异常处理器要么从 head 或者 tail 节点开始传播
inbound事件则从当前节点开始传递到最后节点
outbound事件则从当前节点开始传递 到第一个 outbound节点
目录
相关文章
|
7月前
|
缓存 网络协议 算法
Netty的基础入门(上)
Netty的基础入门(上)
244 1
|
7月前
|
Java API 容器
《跟闪电侠学Netty》阅读笔记 - 数据载体ByteBuf
《跟闪电侠学Netty》阅读笔记 - 数据载体ByteBuf
142 0
|
7月前
|
缓存 网络协议 算法
《跟闪电侠学Netty》阅读笔记 - Netty入门程序解析
《跟闪电侠学Netty》阅读笔记 - Netty入门程序解析
222 0
|
1月前
|
消息中间件 编解码 网络协议
Netty从入门到精通:高性能网络编程的进阶之路
【11月更文挑战第17天】Netty是一个基于Java NIO(Non-blocking I/O)的高性能、异步事件驱动的网络应用框架。使用Netty,开发者可以快速、高效地开发可扩展的网络服务器和客户端程序。本文将带您从Netty的背景、业务场景、功能点、解决问题的关键、底层原理实现,到编写一个详细的Java示例,全面了解Netty,帮助您从入门到精通。
146 0
|
2月前
|
设计模式 Java
Netty Pipeline详解!
本文深入剖析了 Netty 的管道(Pipeline)设计,Netty 是一个基于 Java NIO 的高性能网络应用框架。文章详细介绍了 Pipeline 的原理、源码及设计思维。Pipeline 作为事件处理链条,包含多个处理器,负责处理入站和出站事件。核心组件包括 `ChannelPipeline`、`ChannelHandler` 和 `ChannelHandlerContext`。Netty 通过链式结构和上下文管理实现了高效的事件传播机制,具备高吞吐量和低延迟的特点。本文还探讨了 Pipeline 的职责分离、链式处理、高内聚低耦合等设计原则,为高性能网络编程提供了宝贵的启示。
98 8
|
7月前
|
存储 消息中间件 缓存
Netty的基础入门(下)
Netty的基础入门(下)
132 0
|
7月前
|
前端开发 网络协议 Java
Netty入门指南:从零开始的异步网络通信
Netty入门指南:从零开始的异步网络通信
191 0
|
7月前
|
消息中间件 缓存 Java
《跟闪电侠学Netty》阅读笔记 - 开篇入门Netty
《跟闪电侠学Netty》阅读笔记 - 开篇入门Netty
188 0
|
7月前
|
编解码 前端开发 网络协议
Netty Review - ObjectEncoder对象和ObjectDecoder对象解码器的使用与源码解读
Netty Review - ObjectEncoder对象和ObjectDecoder对象解码器的使用与源码解读
171 0
|
7月前
|
编解码 安全 前端开发
Netty Review - StringEncoder字符串编码器和StringDecoder 解码器的使用与源码解读
Netty Review - StringEncoder字符串编码器和StringDecoder 解码器的使用与源码解读
264 0