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

本文深入解析了Netty中Pipeline的工作原理及其内部结构,包括Pipeline的初始化过程、双向链表的数据结构特点、如何添加ChannelHandler以及事件传播机制等内容。强调了异常处理的最佳实践,并详细解释了inbound与outbound事件的不同传播方向。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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节点
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值