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的基础入门(上)
236 1
|
7月前
|
网络协议 Java 测试技术
阿里内部Netty实战小册,值得拥有
Netty 是一个高性能的 Java 网络通信框架,简化了网络编程并涵盖了最新的Web技术。它提供了一种抽象,降低了底层复杂性,使得更多开发者能接触网络编程。Netty 因其易用性、高效性和广泛的应用场景受到推崇,适合互联网行业从业者学习,有助于理解和开发基于Netty的系统。免费的《Netty实战小册》详细介绍了Netty的各个方面,包括概念、架构、编解码器、网络协议和实际案例,帮助读者深入理解和应用Netty。如需完整版小册,可点击链接获取。
阿里内部Netty实战小册,值得拥有
|
24天前
|
消息中间件 编解码 网络协议
Netty从入门到精通:高性能网络编程的进阶之路
【11月更文挑战第17天】Netty是一个基于Java NIO(Non-blocking I/O)的高性能、异步事件驱动的网络应用框架。使用Netty,开发者可以快速、高效地开发可扩展的网络服务器和客户端程序。本文将带您从Netty的背景、业务场景、功能点、解决问题的关键、底层原理实现,到编写一个详细的Java示例,全面了解Netty,帮助您从入门到精通。
75 0
|
4月前
|
编解码 NoSQL Redis
(十一)Netty实战篇:基于Netty框架打造一款高性能的IM即时通讯程序
关于Netty网络框架的内容,前面已经讲了两个章节,但总归来说难以真正掌握,毕竟只是对其中一个个组件进行讲解,很难让诸位将其串起来形成一条线,所以本章中则会结合实战案例,对Netty进行更深层次的学习与掌握,实战案例也并不难,一个非常朴素的IM聊天程序。
|
4月前
|
前端开发 网络协议
Netty实战巅峰:从零构建高性能IM即时通讯系统,解锁并发通信新境界
【8月更文挑战第3天】Netty是一款高性能、异步事件驱动的网络框架,适用于开发高并发网络应用,如即时通讯(IM)系统。本文将指导你利用Netty从零构建高性能IM程序,介绍Netty基础及服务器/客户端设计。服务器端使用`ServerBootstrap`启动,客户端通过`Bootstrap`连接服务器。示例展示了简单的服务器启动过程。通过深入学习,可进一步实现用户认证等功能,打造出更完善的IM系统。
180 1
|
4月前
|
移动开发 网络协议 算法
(十)Netty进阶篇:漫谈网络粘包、半包问题、解码器与长连接、心跳机制实战
在前面关于《Netty入门篇》的文章中,咱们已经初步对Netty这个著名的网络框架有了认知,本章的目的则是承接上文,再对Netty中的一些进阶知识进行阐述,毕竟前面的内容中,仅阐述了一些Netty的核心组件,想要真正掌握Netty框架,对于它我们应该具备更为全面的认知。
233 2
|
7月前
|
存储 消息中间件 缓存
Netty的基础入门(下)
Netty的基础入门(下)
127 0
|
7月前
|
前端开发 网络协议 Java
Netty入门指南:从零开始的异步网络通信
Netty入门指南:从零开始的异步网络通信
182 0
|
存储 缓存 NoSQL
跟着源码学IM(十一):一套基于Netty的分布式高可用IM详细设计与实现(有源码)
本文将要分享的是如何从零实现一套基于Netty框架的分布式高可用IM系统,它将支持长连接网关管理、单聊、群聊、聊天记录查询、离线消息存储、消息推送、心跳、分布式唯一ID、红包、消息同步等功能,并且还支持集群部署。
13509 1
|
7月前
|
消息中间件 Oracle Dubbo
Netty 源码共读(一)如何阅读JDK下sun包的源码
Netty 源码共读(一)如何阅读JDK下sun包的源码
132 1