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节点
目录
相关文章
|
12天前
|
缓存 网络协议 算法
Netty的基础入门(上)
Netty的基础入门(上)
41 0
|
2月前
|
Java API 容器
《跟闪电侠学Netty》阅读笔记 - 数据载体ByteBuf
《跟闪电侠学Netty》阅读笔记 - 数据载体ByteBuf
79 0
|
2月前
|
缓存 网络协议 算法
《跟闪电侠学Netty》阅读笔记 - Netty入门程序解析
《跟闪电侠学Netty》阅读笔记 - Netty入门程序解析
134 0
|
2月前
|
Java Unix Linux
【Netty技术专题】「原理分析系列」Netty强大特性之Native transports扩展开发实战
当涉及到网络通信和高性能的Java应用程序时,Netty是一个强大的框架。它提供了许多功能和组件,其中之一是JNI传输。JNI传输是Netty的一个特性,它为特定平台提供了高效的网络传输。 在本文中,我们将深入探讨Netty提供的特定平台的JNI传输功能,分析其优势和适用场景。我们将介绍每个特定平台的JNI传输,并讨论其性能、可靠性和可扩展性。通过了解这些特定平台的JNI传输,您将能够更好地选择和配置适合您应用程序需求的网络传输方式,以实现最佳的性能和可靠性。
55 7
【Netty技术专题】「原理分析系列」Netty强大特性之Native transports扩展开发实战
|
28天前
|
NoSQL Redis
Netty实战:模拟Redis的客户端
Netty实战:模拟Redis的客户端
13 0
|
2月前
|
消息中间件 缓存 Java
《跟闪电侠学Netty》阅读笔记 - 开篇入门Netty
《跟闪电侠学Netty》阅读笔记 - 开篇入门Netty
91 0
|
3月前
|
分布式计算 前端开发 网络协议
13W字!腾讯高工手写“Netty速成手册”,3天能走向实战
在java界,netty无疑是开发网络应用的拿手菜。你不需要太多关注复杂的nio模型和底层网络的细节,使用其丰富的接口,可以很容易的实现复杂的通讯功能。
|
3月前
|
监控 网络协议 调度
Netty Review - 深入探讨Netty的心跳检测机制:原理、实战、IdleStateHandler源码分析
Netty Review - 深入探讨Netty的心跳检测机制:原理、实战、IdleStateHandler源码分析
110 0
|
3月前
|
编解码 安全 前端开发
Netty Review - StringEncoder字符串编码器和StringDecoder 解码器的使用与源码解读
Netty Review - StringEncoder字符串编码器和StringDecoder 解码器的使用与源码解读
43 0
|
4月前
|
网络协议 Java 容器
《跟闪电侠学Netty》阅读笔记 - ChannelHandler 生命周期
《跟闪电侠学Netty》阅读笔记 - ChannelHandler 生命周期
41 0
《跟闪电侠学Netty》阅读笔记 - ChannelHandler 生命周期