Netty Review - 探索Channel和Pipeline的内部机制

news2024/12/23 23:01:23

文章目录

  • 概念
  • Channel Pipeline实现原理分析
    • 详解 Inbound事件和Outbound事件
    • 演示Code

在这里插入图片描述


概念

在这里插入图片描述

Netty中的ChannelPipeline是其核心概念,它们在构建高性能网络应用程序时起着重要作用。

Channel:
在Netty中,Channel表示一个开放的连接,可以执行读取/写入操作。Channel可以是网络套接字,文件,或者任何可以进行I/O操作的实体。每个Channel都与一个EventLoop相关联,它负责处理所有I/O事件和任务。Channel提供了异步的I/O操作,可以通过注册关注的事件来触发。

Pipeline:
Pipeline是一个处理I/O事件或执行业务逻辑的组件链。它由一系列ChannelHandler组成,每个ChannelHandler都负责处理特定类型的事件。当数据通过Channel时,它会在Pipeline中流动,每个ChannelHandler都有机会处理它。

内部机制:

  1. Channel:

    • Channel内部包含一个Pipeline
    • 当一个Channel被创建时,会创建一个新的Pipeline实例。
    • Channel的生命周期与Pipeline密切相关,一个Channel的事件将在其关联的Pipeline中被处理。
  2. Pipeline:

    • Pipeline是由一系列ChannelHandler按顺序组成的。
    • 数据在Pipeline中流动,每个ChannelHandler按照添加的顺序逐个处理数据。
    • 每个ChannelHandler都可以拦截并处理入站(Inbound)或出站(Outbound)事件,例如数据读取、数据写入等。
  3. 事件传播:

    • 当事件通过Channel时,它将被传播到关联的Pipeline
    • 事件首先通过ChannelPipeline中的第一个ChannelHandler,然后依次传播到链中的下一个ChannelHandler
    • ChannelHandler可以拦截并处理特定类型的事件,也可以将事件传递给下一个ChannelHandler
  4. ChannelHandlerContext:

    • ChannelHandlerContextChannelHandlerPipeline以及Channel之间的桥梁。
    • 每个ChannelHandler都有一个关联的ChannelHandlerContext,它提供了访问PipelineChannel的方法。

Netty中的Channel代表一个开放的连接,而Pipeline是一个处理I/O事件的链。

Channel的生命周期与Pipeline紧密相连,数据通过Pipeline中的ChannelHandler逐个处理。

事件传播通过ChannelHandlerContext实现,使得每个ChannelHandler都可以对事件进行处理或传递给下一个处理器。


Channel概念与java.nio.channel概念一致,用以连接IO设备(socket、文件等)的纽带。

在这里插入图片描述

Netty的Channel可以这么分类

Channel的IO类型主要有两种:

  • 非阻塞IO(NIO)
  • 阻塞IO(OIO);

数据传输类型有两种:

  • 按事件消息传递(Message)
  • 按字节传递(Byte)

适用方类型也有两种:

  • 服务器(ServerSocket)
  • 客户端(Socket)

还有一些根据传输协议而制定的的Channel,如:

  • TCP
  • UDTP
  • SCTP等

在这里插入图片描述

Netty按照类型逐层设计相应的类。最底层的为抽象类AbstractChannel,再以此根据IO类型、数据传输类型、适用方类型实现。类图可以一目了然,如上图


Channel Pipeline实现原理分析

在这里插入图片描述
首先,想象一下Channel就像是通道,它提供了一些操作方法,比如读(read)和写(write)。但它并不是直接执行这些操作,而是通过一个叫做Pipeline的东西来实现的。

现在,Pipeline可以看作是一条连接了很多小工具的长链。每个小工具被称为Handler,它们负责处理网络通信中的不同任务,比如数据的编码、解码和其他处理。

这个链的结构可以看作是一个双向链表,每个节点是一个处理器。内部代码实现的流程是从头(Head)到尾(Tail)的顺序,对于传入数据,或者从尾(Tail)到头(Head)的顺序,对于传出数据。


详解 Inbound事件和Outbound事件

Inbound事件和Outbound事件是两种类型的事件,根据触发事件的源头进行区分

https://stackoverflow.com/questions/22354135/in-netty4-why-read-and-write-both-in-outboundhandler

在这里插入图片描述

Inbound指网络数据从外部进入Netty过程,也就是数据的输入。当Nettyt收到外部的数据,就会调用Inbound相关方法来处理数据。例如,当Netty收到一个新的连接请求时,就会调用Inbound#channelActive方法来处理这个连接请求。另外,当Netty接收到一个数据包时,就会调用Inbound#channelRead方法来处理这个数据包。

outbound指网络数据从Netty出到外部的过程,也就是数据的输出。当Netty 要向外部发送数据时,就会调用Outbound 相关方法来处理数据。例如,当Netty 要向外部发送一个数据包时,就会调用Outbound#write法来将数据包写入输出缓冲区。另外,当Netty需要关闭一个连接时,就会调用outboundc#lose方法来关闭连接。


演示Code

请移步  [Netty Review - 探索Pipeline的Inbound和Outbound](https://blog.csdn.net/yangshangwei/article/details/134704751)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1273920.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【VScode】超详细图片讲解下载安装、环境配置、编译执行、调试

这里是目录 VScode是什么?VScode的下载和安装环境介绍安装中文插件 配置VScodeC/C开发环境下载和配置MinGW-w64 编译器套件下载:配置: 安装C/C插件在VScode上编写代码设置C/C编译选项创建执行任务编译执行如果想写其他代码在同一个文件夹在不…

【双向链表的实现】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 1. 双向链表的结构 2. 双向链表的实现 2.1 头文件 ——双向链表的创建及功能函数的定义 2.2 源文件 ——双向链表的功能函数的实现 2.3 源文件 ——双向链表功能的…

SS6811H38V/1.6A 两通道 H 桥驱动芯片

SS6811H 为舞台灯光和其它电机一体化应用 提供一种双通道集成电机驱动方案。SS6811H 有 两路 H 桥驱动,每个 H 桥可提供最大输出电流 1.6A (在 24V 和 Ta 25C 适当散热条件下),可驱 动两个刷式直流电机,或者一个双极步进电机,或 …

ssm+java车辆售后维护系统 springboot汽车保养养护管理系统+jsp

以前汽车维修人员只是在汽车运输行业中从事后勤保障工作,随着我国经济的发展,汽车维修行业已经从原来的从属部门发展成了如今的功能齐备的独立企业。这种结构的转变,给私营汽修企业和个体汽修企业的发展带来了契机,私营企业和个体维修企业的加入也带动了整个汽修行业的整体水平…

[c++]—string类___深度学习string标准库成员函数与非成员函数

要相信别人能做出来自己一定可以做出来,只不过是时间没到而已 目录 🚩string类对象capacity操作 💻reserve()保留 💻resize() 🚩string类对象元素访问操作 💻operator[]和at() 💻operator…

Kubernetes 安全最佳实践:保护您的秘密

Kubernetes 是一个可用于微服务的开源容器编排平台。当我们想要部署容器化应用程序、自动化管理和扩展应用程序时,Kubernetes 非常有用。 在容器中运行单个微服务而不是在同一虚拟机中运行多个进程几乎总是更安全。每当我们在 Kubernetes 中启动任何 pod 时&#x…

「黄钊的AI日报·第二季」早鸟票,最后48小时~

每天5条AI内容点:不是新闻汇总,而是站在11年AI产品经理的视角,将原AI信息中的干货认知,提炼成我自己的文字、展示“what I see”。 做社群“AI产品经理大本营”6年以来,我都是在非常用心的输出AI干货;这份“…

vue3随机生成8位字母+数字

// 随机生成8位字母数字 export const autoPassword: any () > {// console.log("自动生成");//可获取的字符串const chars ABCDEFGHIJKLMNOPQRSTUVWSYZabcdefghijklmnopqrstuvwsyz0123456789;const list [];//通过随机获取八个字符串的索引下标for (let i 0;…

力扣11题 盛最多水的容器 双指针算法

11. 盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明 你不能倾斜容器. 示…

【开源】基于Vue.js的超市账单管理系统的设计和实现

项目编号: S 032 ,文末获取源码。 \color{red}{项目编号:S032,文末获取源码。} 项目编号:S032,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统设计3.1 总体设计3.2 前端设计3…

操作系统进程与线程篇

目录 一、进程 1.1、进程状态 1.2、进程的控制结构 1.3、进程的控制 1.4、进程的上下文切换 二、线程 2.1.线程是什么 2.2、线程与进程的比较 2.3、线程的上下文切换 2.4、线程的实现 2.5、轻量级线程 三、进程间的通信方式 3.1、管道 3.2、消息队列 3.3、共享内…

Linux--系统结构与操作系统

文章目录 冯诺依曼体系结构为什么要有内存?场景一 操作系统何为管理? 冯诺依曼体系结构 冯诺依曼体系结构是计算机体系结构的基本原理之一。它将程序和数据都以二进制形式存储,以相同的方式处理和存取。 上图是冯诺依曼体系结构的五大组成部…

Neo4j 数据库管理 数据备份与恢复(头歌)

文章目录 第1关:数据备份与恢复任务描述相关知识数据备份数据导入 编程要求测试说明答案测试前准备Cypher 代码数据备份与导入 第1关:数据备份与恢复 任务描述 本关任务:熟练掌握数据备份与恢复。 相关知识 为了完成本关任务,…

Jvm常见问题

1. 为什么用元空间替换永久代 避免OOM异常:永久代中存放了很多JVM需要的类信息,这些数据大多数是不会被清理的,所以Full GC往往无法回收多少空间。但在元空间模型中,由于字符串常量池已移至堆外,且元空间的大小不受JV…

Elasticsearch:使用 ILM 示例运行降采样 (downsampling)

如果你对降采样还不是很熟的话,请阅读之前的文章 “Elasticsearch:对时间序列数据流进行降采样(downsampling)”。这是一个简化的示例,可让你快速了解降采样如何作为 ILM 策略的一部分来减少一组采样指标的存储大小。 该示例使用典…

LeetCode | 二叉树的最大深度

LeetCode | 二叉树的最大深度 OJ链接 这里需要注意的一点是每次有返回值,需要定义变量来保存上一次的值最后取最高的一方加1 int maxDepth(struct TreeNode* root) {if(root NULL)return NULL;int left maxDepth(root->left);int right maxDepth(root->r…

C语言中一些有关字符串的常见函数的使用及模拟实现(1)

在编程的过程中,我们经常要处理字符和字符串,为了⽅便操作字符和字符串,C语⾔标准库中提供了 ⼀系列库函数,接下来我们就学习⼀下这些函数。 文章目录 strlen函数的使用及模拟实现strcmp函数的使用及模拟实现strcpy函数的使用及代…

《C++PrimerPlus》第9章 内存模型和名称空间

9.1 单独编译 Visual Studio中新建头文件和源代码 通过解决方案资源管理器,如图所示: 分成三部分的程序(直角坐标转换为极坐标) 头文件coordin.h #ifndef __COORDIN_H__ // 如果没有被定义过 #define __COORDIN_H__struct pola…

阅读文献总结2023

阅读文献基于卷积神经网络多源融合的网络安全态势感知模型 阅读文献 基于卷积神经网络多源融合的网络安全态势感知模型 题目基于卷积神经网络多源融合的网络安全态势感知模型文章信息:年份2023发文单位山西财经大学收录刊会计算机科学 (北大核心&#…

和鲸科技与国科环宇建立战略合作伙伴关系,以软硬件一体化解决方案促进科技创新

近日,在国科环宇土星云算力服务器产品发布会暨合作伙伴年度会上,和鲸科技与国科环宇正式完成战略伙伴签约仪式,宣布达成战略合作伙伴关系。未来,双方将深化合作,充分发挥在产品和市场方面的互补优势,为企事…