Netty中的常用组件(三)

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.hqwc.cn/news/463334.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 移动应用开发 创建第一个Android项目

文章目录 一、创建第一个Android项目1.1 准备好Android Studio1.2 运行程序1.3 程序结构是什么app下的结构res - 子目录(所有图片、布局、字AndroidManifest.xml 有四大组件,程序添加权限声明 Project下的结构 二、开发android时,部分库下载异…

Godot VisualStudio外部编辑器设置

文章目录 前言Godot visual studio 调试附加程序监听解决中文报错问题通过调试属性直接启动添加场景运行结果 Godot专栏地址 前言 Godot本质上只是一个游戏引擎,对C#只做了最小的适配,就是能打开,但是不能Debug。Godot支持许多外部编辑器&am…

力扣经典题:对称二叉树

思路:写出另一个函数,比较两个节点,根的左右节点单独考虑,作为主体函数写出,然后在递归返回左指针的左边与右指针的右边,以及左指针的右边和右指针的左边,注意考虑空指针情况 bool good(struct …

汽车零部件MES系统实施方案

中国汽车业在不断完善提升汽车制造自动化技术的同时,瞄准汽车零部件系统化开发、模块化制造、集成化供货模式,通过汽车零部件MES系统的快速应用,借助全新的设计和工艺流程,对产线关键工位的交互进行严格控制,改变以往由…

treeData 树结构数据处理(react)

1.什么是tree 树(tree)形结构是一种重要的非线性结构,依据分支关系定义的层次结构,在这种结构中,每个元素至多只有一个前趋,但可以有多个后继。 树的定义:树(Tree)是n(n 大于等于0)个节点的有限集合T,当n0…

Mysql Day03

多表设计 一对多 在多的一方添加外键约束,关联另外一方主键 一对一 任意一方添加外键约束,关联另外一方主键 多对多 建立第三张中间表,中间表至少包含两个外键,分别关联两方主键 idstu_idcourse_id 1 11 2 12313421524 案…

【正式】今年第一篇CSDN(纯技术教学)

一、文件上传简介 文件上传漏洞是指用户上传了一个可执行的脚本文件(木马、病毒、恶意脚本、webshell等),并通过此脚本文件获得了执行服务器端命令的能力。上传点一般出现在头像、导入数据、上传压缩包等地方,由于程序对用户上传…

uv机器电机方向极性

爱普生主板设置X、Y 电机方向极性:请根据实际情况设置,开机初始化时如果电机运动方向反了则修改此极性。 理光主板设置X、Y 电机方向极性

english_syntax

文章目录 什么是英语的句子?英语句子的结构句子的成分(词性问题)谓语系动词主语宾语表语 并列句从句引导词名词性从句形容词性从句(定语从句)副词性从句(状语从句) 特殊结构强调句型倒装句型虚拟…

网课:[NOIP2017]奶酪——牛客(疑问)

链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述 现有一块大奶酪,它的高度为 h,它的长度和宽度我们可以认为是无限大的,奶酪中间有许多半径相同的球形空洞。我们可以在这块奶酪中建立空间坐标系&a…

【Java EE初阶十一】文件操作(IO)

1. 认识文件 所谓的文件是一个广义的概念,可以代表很多东西;在操作系统里面,会把很多的硬件设备和软件设备都抽象成“文件”,统一进行管理;但是大部分情况下,我们读到的文件,都是指硬盘的文件&a…

Linux之umask的使用

一、umask的作用 umask值用于设置用户在创建新文件和目录时的默认权限。umask值一共有4组数字,其中第1组数字用于定义特殊权限,一般不关心,日常工作中大家用的更多的是后面三组数字。以下图为例,输入“umask”命令之后&#xff0c…