Netty中的常用组件(三)

news2025/1/13 10:10:40

ChannelPipeline

  • 基于Netty的网路应用程序中根据业务需求会使用Netty已经提供的Channelhandler
    或者自行开发ChannelHandler,这些ChannelHandler都放在ChannelPipeline中统一
    管理,事件就会在ChannelPipeline中流动,并被其中一个或者多个ChannelHandler处理
    在这里插入图片描述

  • ChannelPipeline提供了ChannelHandler链的容器,并定义了在该链上传播入站(也就是从网络到业务处理)
    和出站(也就是从业务处理到网络),各种事件流的API,代码中的ChannelHandler都是放在ChannelPipeline中的。

  • 使得事件流经ChannelPipeline是ChannelHandler的工作,它们是在应用程序的初始化或者引导阶段被安装的。
    这些ChannelHandler对象接收事件、执行它们所实现的处理逻辑,并将数据传递给链中的下一个ChannelHandler,
    而且Channelhandler对象也完全可以拦截事件不让事件继续传递。它们的执行顺序是由它们被添加的顺序所决定的。

在这里插入图片描述

  • ChannelPipeline上的方法。
    既然ChannelPipeline以双向链表的形式进行维护管理Handler,自然也提供了对应的方法在ChannelPipeline中
    增加或者删除、替换handler.
    addFist、addBefore、addAfter、addLast将一个ChannelHandler添加到ChannelPipeline中。
    remove将一个ChannelHandler从ChannelPipeline中移除
    replace将ChannelPipeline中的一个ChannelHandler替换为另一个ChannelHandler
    get通过类型或者名称返回ChannelHandler
    context返回和ChannelHandler绑定的ChannelHandlerContext
    names返回ChannelPipeline中所有ChannelHandler的名称
    ChannelPipeline的API公开了用于调用入站和出站操作的附加方法

ChannelHandler

在这里插入图片描述

  • ChannelPipeline中的ChannelHandler.
    入站和出站ChannelHandler被安装到同一个ChannelPipeline中,ChannelPipeline以双向链表的形式进行维护管理。如上图,在网络上传递的数据,要求加密,但是加密后密文比较大,需要压缩后再传输,而且按照业务要求,需要检查报文中携带的用户信息是否合法,于是图中实现了,解压(入)Handler、压缩(出)Handler、解密(入)Handler、加密(出)Handler
    授权(入)Handler.
  • 如果一个消息或者任何其他入站事件被读取,那么它会从ChannelPipeline的头部开始流动,但是只被处理入站事件的Handler处理,也就是解压(入)Handler、解密(入)Handler、授权(入)Handler,最终,数据将会到达ChannelPipeline的尾端,届时,所有的处理就都结束了
  • 数据的出站运动(即正在被写的数据)在概念上也是一样的。在这种情况下,数据将从链的尾端开始流动,但是制备处理出站的Handler处理,也就是加密(出)Handler、压缩(出)Handler,直到它到达链的头部为止。在这之后,出站数据将会到达网络传输层,也就是Socket

在这里插入图片描述在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/1a8a8f18927140ff867fe4725a77e99d.png

  • Netty能区分入站事件的Handler和出站的Handler,并确保数据只会在具有相同定向的两个ChannelHandler之间传递在编写Netty应用程序时要注意,分属出站和入站不同的Handler,在业务没有特殊要求的情况下是无所谓顺序的,比如压缩(出)Handler可以放在解压(入)Handler和解密(入)Handler中间,也可以放在解密(入)Handler和授权之间

  • 而同属一个方向的Handler则是有顺序的,因为上一个Handler处理的结果往往是下一个Handler的要求的输入。比如入站处理,对于收到的数据,只有先解压才能得到密文,才能解密,只有解密后才能拿到明文中的用户信息进行授权检查,所以解压-解密-授权这个,三个入站Handler的顺序就不能乱
    在这里插入图片描述
    在这里插入图片描述

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

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

相关文章

Mysql-Explain-使用说明

Explain 说明 explain SELECT * FROM tb_category_report;id:SELECT识别符,这是SELECT查询序列号。select_type:表示单位查询的查询类型,比如:普通查询、联合查询(union、union all)、子查询等复杂查询。table&#x…

房屋租赁系统的Java实战开发之旅

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

【Java多线程案例】实现阻塞队列

1. 阻塞队列简介 1.1 阻塞队列概念 阻塞队列:是一种特殊的队列,具有队列"先进先出"的特性,同时相较于普通队列,阻塞队列是线程安全的,并且带有阻塞功能,表现形式如下: 当队列满时&…

CSP-202012-2-期末预测之最佳阈值

CSP-202012-2-期末预测之最佳阈值 【70分思路】 本题的难点还是时间复杂度,暴力枚举会导致时间超限。对于每一个可能的阈值theta,代码都重新计算了整个predict数组,统计预测正确的数目,因为有两个嵌套的循环,使得时间…

各版本安卓的彩蛋一览

目录 前言前彩蛋纪Android 2.3 GingerbreadAndroid 3 HoneycombAndroid 4.0 Ice Cream SandwichAndroid 4.1-4.3 JellybeanAndroid 4.4 KitKatAndroid 5 LollipopAndroid 6 MarshmallowAndroid 7 NougatAndroid 8 OreoAndroid 9 PieAndroid 10 Queen CakeAndroid 11 Red Velvet…

分享66个相册特效,总有一款适合您

分享66个相册特效,总有一款适合您 66个相册特效下载链接:https://pan.baidu.com/s/1jqctaho4sL_iGSNExhWB6A?pwd8888 提取码:8888 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,收集整理更不…

【Java EE初阶十】多线程进阶二(CAS等)

1. 关于CAS CAS: 全称Compare and swap,字面意思:”比较并交换“,且比较交换的是寄存器和内存; 一个 CAS 涉及到以下操作: 下面通过语法来进一步进项说明: 下面有一个内存M,和两个寄存器A,B; CAS(M,A,B)&am…

社区店营销新趋势:如何吸引并留住顾客?

作为一名资深的鲜奶吧创业者,我已经在这个行业摸爬滚打了五年。 这五年的时间,我见证了社区店营销的变迁,也积累了一些关于如何吸引并留住顾客的经验。今天,我想和大家分享一些留住顾客的核心干货。(可以点赞收藏&…

YOLOv8改进 | 检测头篇 | 独创RFAHead检测头超分辨率重构检测头(适用Pose、分割、目标检测)

一、本文介绍 本文给大家带来的改进机制是RFAHead,该检测头为我独家全网首发,本文主要利用将空间注意力机制与卷积操作相结合的卷积RFAConv来优化检测头,其核心在于优化卷积核的工作方式,特别是在处理感受野内的空间特征时。RFAConv主要的优点就是增加模型的特征提取能力,…

MATLAB实现LSTM时间序列预测

LSTM模型可以在一定程度上学习和预测非平稳的时间序列,其具有强大的记忆和非线性建模能力,可以捕捉到时间序列中的复杂模式和趋势[4]。在这种情况下,LSTM模型可能会自动学习到时间序列的非平稳性,并在预测中进行适当的调整。其作为…

股票均线的使用方法和实战技术,看涨看空的均线形态与案例教学

一、教程描述 本套教程讲解了14种均线的特殊形态,通过直观图形以及大量案例的教学,将深奥、繁琐的均线变得生动与具体,广大投资者在认真学习以后,可以学会均线的使用方法,掌握最强的均线应用实战技术。本套教程不仅适…

Qt可视化大屏布局

科技大屏现在非常流行,这里分享一下某个项目的大屏布局(忘了源码是哪个博主的了) 展示 这个界面整体是垂直布局,分为两个部分,标题是一个部分,然后下面的整体是一个layout布局,为另外一部分。 l…

Shell脚本系列| SSH分发公钥方法 - expect脚本的使用

ssh原理:在SSH安全协议的原理中, 是一种非对称加密与对称加密算法的结合。用于确保远程登录和其他网络服务的会话安全,通过非对称加密、会话加密、多重验证机制等手段,保护数据传输的机密性和完整性。 ssh登录有2种方法&#xff1…

图书商城系统

文章目录 图书商城系统一、项目演示二、项目介绍三、系统部分功能截图四、部分代码展示五、底部获取项目(9.9¥带走) 图书商城系统 一、项目演示 网上书城 二、项目介绍 基于SSM的图书商城网站 运行环境:idea或eclipse 数据库:mysql 开发语…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Web组件

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Web组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Web组件 提供具有网页显示能力的Web组件,ohos.web.webview提供web控制能…

4. TypeScript

目录 1 TypeScript 介绍 2 TypeScript 常用类型 2.1 类型标注的位置 2.2 字符串、数字、布尔类型 2.3 字面量类型 2.4 interface 类型 2.5 class 类型 Vue1:基础跟使用方式 Vue2:路由方面 Vue3:状态管理 vuex 状态管理库 1 TypeScrip…

鸿蒙原生应用再添新丁!央视新闻 入局鸿蒙

鸿蒙原生应用再添新丁!央视新闻 入局鸿蒙 来自 HarmonyOS 微博2月9日消息,#央视新闻启动鸿蒙原生应用开发#中央广播电视总台旗舰央视新闻客户端正式宣布,将基于HarmonyOS NEXT鸿蒙星河版,启动央视新闻 鸿蒙原生应用开发&#xf…

springboot微信小程序 uniapp学习资料分享系统v9uy4

理论意义 当今网络教学已成为各国教育改革 和发展的趋势。因此,构建一个适合交互式课堂教学模式的教学平台就成了当务之 急。 在国内高校,目前交互平台主要用于网络学院的远程教学,至于校园内的正规教学,老师自发建立课程主页的比…

Web后端开发:事务与AOP

事务管理 在学习数据库时,讲到:事务是一组操作的集合,它是一个不可分割的工作单位。事务会把所有的操作作为一个整体,一起向数据库提交或者是撤销操作请求,要么同时成功,要么同时失败。 事务的操作主要有三…

VUE学习——数组变化侦测

官方文档 变更方法: 使用之后,ui可以直接发生改变。改变原数组 替换数组: 使用之后需要接受重新赋值,不然ui不发生改变。不改变原数组