初识Netty框架

news2024/12/26 22:04:07

总体概述

Netty作为一款网络通信框架,底层封装了NIO。我们在使用Netty时,无需再关注NIO细节。下图为Netty处理流程图:
在这里插入图片描述
应用程序中使用Netty作为网络通信框架后,会形成一条PipeLine链,PipeLine链上有一个一个的事件处理器。当应用程序接收到网络数据,或者发送网络数据时,数据会经过PipeLine上的事件处理器,对数据进行处理,然后再将处理后的数据进行发送或者业务处理。

在这里插入图片描述
事件处理器可细分为入站处理器和出站处理器。入站表示接收网络数据到业务处理的过程。出站表示发送数据到网络的过程。当接收网络数据时,数据会经过入站处理器到达业务处理,当发送数据时,数据经过出站处理器进行处理。所以,入站处理器要进行一定的排序,出站处理器也需要一定的排序。而入站和出站之间的顺序,没有任何关系。
以上就是Netty的大体介绍。我们使用Netty,本质就是定义处理器以及数据的处理业务即可。而无需再关心NIO中注册连接,读写事件等操作。

Netty核心组件

Channel、EventLoop、EventLoopGroup

在这里插入图片描述
EventLoopGroup可以理解成线程池的作用,生产EventLoop实例。
EventLoop可以理解成一个线程,用于执行任务。
Channel可以理解成一个Socket。一个Channel对应一个EventLoop,而一个EventLoop可以对应多个Channel。Channel中的网络事件,由EventLoop这个线程来执行。
在这里插入图片描述
EventLoop是对Channel中数据的业务处理。而NIO中的Selector是对Channel中I/O事件的处理。EventLoop中维护了Channel的PileLine,来对Channel中数据执行一遍事件处理器链,进行数据业务操作。而Selector是对应用程序中所有channel,进行I/O事件的选择。比如Channel中数据通过EventLoop进行完成业务处理 后,能发送数据了,则Selector选择这个Channel,进行write操作发送数据。一个EventLoop对应一个selector。即一个线程对应一个selector。

Channel生命周期:
在这里插入图片描述
当Channel与远端建立连接后,状态就是Active状态,当断开连接后,切换为Inactive状态,然后与EventLoop解绑,切换为Unregistered状态。每个状体切换,都会触发一个事件,我们可以在Handler里定义事件处理器,去进行一些业务操作。

ChannelHandler、ChannelPileLine

从应用程序开发而言,Netty的主要组件是ChannelHandler。它充当了所有入站和出站数据的应用程序逻辑的地方。
在这里插入图片描述
ChannelHandler是一个接口,其下面分为InboundHandler入站处理器和OutBoundHandler出站处理器。netty使用适配器模式,可以继承Adapter类,来实现我们自己感兴趣的方法,而不是全部方法。
SimpleChannelInboundHandler研究:自动释放Buffer资源,避免内存泄漏。避免内存泄漏的法则是在ChannelHandler链中,要么数据向后传递,后面还有Handler处理数据,要么就在最后一个处理的Handler上释放内存。

一个channel在创建时,就会创建一个ChannelPileLine对象。在ChannelPileLine中,存放ChannelHandler链。一个ChannelHandler对象,允许放在不同的Channel中的ChannelPileLIne中。但是需要加上@sharable注解,告诉netty要共用这个ChannelHandler对象。这样的话会产生线程安全问题。

ByteBuf

Netty封装了NIO的ByteBuffer,定义了ByteBuf类。
在这里插入图片描述

编码器解码器

Netty提供了http协议编码器,解码器,https协议编码器,解码器。websocket编码器,解码器。
有了解码器以后,我们的服务就可以接收这些协议的数据了,netty解码器自己去解析协议数据,供我们拿到业务数据。例如,如果我们的服务想接收mqtt协议,完全可以用netty的mqtt解码器去接收数据,然后解析,就无需引入第三方mqtt服务器了。

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

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

相关文章

buuctf10(异或注入中文字符绕过preg_match伪随机数漏洞seed)

目录 [WUSTCTF2020] 颜值成绩(异或注入) [Zer0pts2020]Can you guess it?(中文字符绕过preg_match) [FBCTF2019]RCEService(/bin/调用命令 || 回溯绕过preg_match) [GKCTF 2021]easycms(后台弱口令&任意文件下载) [GWCTF 2019]枯燥的抽奖(伪随机数漏洞seed) [MRCTF20…

msprofiler 性能调优命令行实战(口罩识别推理)

案例介绍 本案例使用口罩识别推理程序作为例子进行演示,硬件平台是华为昇腾310设备(Ascend 310),该口罩识别使用目标检测中SSD模型,检测的结果有两个类别:戴口罩的脸、没带口罩的脸。成功执行推理程序后我们对其进行了推理调优&a…

连续7年领跑!在华为云桌面,藏了一盘数字办公的大棋

作者 | 曾响铃 文 | 响铃说 连续7年领跑!在国内虚拟客户端计算软件市场,华为云再度占据行业第一的位置,力压Citrix、Microsoft和VMware等全球知名厂商。 所谓的虚拟客户端计算软件市场,简单来理解就是云桌面市场。伴随着数字办…

Oracle报错:ORA-28001:口令已失效

一、链接Oracle报错 :ORA-28001:口令已失效 解决办法 原因:Oracle11G创建用户时缺省密码过期限制是180天(即6个月), 如果超过180天用户密码未做修改则该用户无法登录 解决方式: 方式一&#xf…

R语言可视化探索BRFSS数据并逻辑回归Logistic回归预测中风

第1部分:关于数据 行为风险因素监视系统(BRFSS)是美国的年度电话调查。最近我们被客户要求撰写关于BRFSS的研究报告,包括一些图形和统计输出。BRFSS旨在识别成年人口中的危险因素并报告新兴趋势。例如,询问受访者饮食…

Python 并发编程

一.Python 对并发编程的支持 多线程:threading,利用CPU和IO可同时执行的原理,让CPU不会干巴巴等待IO完成,而是切换到其他Task(任务),进行多线程的执行。多进程:multiprocessing&…

微前端总结

微前端概述 微前端概念是从微服务概念扩展而来的,摒弃大型单体方式,将前端整体分解为小而简单的块,这些块可以独立开发、测试和部署,同时仍然聚合为一个产品出现在客户面前。可以理解微前端是一种将多个可独立交付的小型前端应用…

使用极限学习机进行股市预测(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 极限学习机(Extreme Learning Machine,ELM)作为前馈神经网络学习中一种全新的训练框架,在行为识别、情…

EPICS -- 使用asynPortDriver类编写示一个示例程序

本示例展示了如何使用asynPortDriver类编写一个EPICS端口驱动程序的示例。 这个驱动程序参数库中一个有5个参数,分别支持5个EPICS记录。 如下是具体步骤: 1) 用makeBaseApp.pl脚本建立这个IOC应用程序的框架: [blctrlmain-mach…

IDEA中如何实现git的cherry-pick可视化操作?

目录 问题现象: 问题分析: 解决方法: 拓展:如何回退提交记录? 问题现象: 今天在学习了git的cherry-pick功能,于是引出了一个问题: IDEA中如何实现git的cherry-pick可视化操作&am…

【Docker学习教程系列】7-如何将本地的Docker镜像发布到阿里云

在上一篇中,我们使用docker commit 命令,创建了一个带有vim的Ubuntu镜像。那么怎么将这个镜像分享出去呢?本文就来讲解如何将本地的docker镜像发布到阿里云上。 本文主要内容: 1:本地镜像发布到阿里云流程 2&#xf…

Linux网络原理与编程(4)——第十四节 传输层协议

目录 前置知识 再谈端口号 几个函数 netstat telnet UDP报文 UDP协议端格式 UDP首部: UDP的特点 UDP的缓冲区 TCP报文详解 Tcp报头详解 传输层是在应用层的下面一层,我们在讲解传输层协议之前,先来说一说一些前置知识即命令函数等…

看完就会flink基础API

文章目录一、执行环境(Execution Environment)1、创建执行环境2、执行模式(Execution Mode)3、触发程序执行二、源算子(Source)1、数据源类准备2、从集合中读取数据3、从文件中读取数据4、从Socket中读取数据5、从Kafka中读取数据…

ISCSLP 2022 Program|希尔贝壳邀您参加第十三届中文口语语言处理国际会议

第十三届中文口语语言处理国际会议将于2022年12月11-14日(本周日~下周三)正式开启,本次会议中的部分Session将通过语音之家视频号进行线上直播,欢迎大家参加! 官网:www.iscslp2022.org 大会简介 中文口语…

ABAP学习笔记之——第十二章:SALV

一、概要 在Net Weaver 2004 平台上集合了利用函数和 GRID 的功能发布的 SALV 包程序 (SALV也称为 New ALV)。SALV 可以像利用函数生成 ALV 的不用创建屏幕就可以调用的全屏式ALV,还可以利用控制器在屏幕的控制器中显示 ALV。利用GRID 的ALV 虽然不能注册成 Batch …

速卖通知识产权规则介绍,如何才能规避侵权的问题?

最近有商家咨询到我,关于速卖通对商品知识产权是怎么评判的,今天就来给大家科普一下平台关于知识产权的规则介绍 速卖通平台严禁用户未经授权发布、销售涉嫌侵犯第三方知识产权的商品或发布涉嫌侵犯第三方知识产权的信息。 若卖家发布涉嫌侵犯第三方知…

从股票市场选择配对的股票:距离计算方法

我们来看看如何定义距离的计算方法。 回想一下,在共同趋势模型中,协整的必要条件是从共同趋势得到的新息序列必须完全相关。APT中的共同因子回报就理解成是从共同趋势得到的新息序列,因此,新息序列之间的相关系数就是共同因子回报…

网关性能大PK,Spring Cloud Gateway让人大失所望

现在的架构基本都是使用微服务的,而网关作为微服务的统一门户在架构模式中用得越来越多,API网关是所有客户端的单一入口点。 API网关模式是微服务体系结构的一个很好的起点,因为它能够将特定的请求路由到我们从整体上分离的不同服务。事实上…

嘿嘿嘿,10个我经常逛的“小网站”,不骗人

反思一下,为什么你会点进来~ 咳咳,步入正题。 工欲善其事必先利其器,你们的收藏夹里收藏了多少“小网站”?今天和大家分享10个我压箱底的效率工具/平台,现在用不上不要紧,赶紧收藏最关键! 1.G…

【产品设计】APP常见的6种图片浏览模式

六种是指比较常见的图片浏览模式,是在这四种的基础上加上手势来实现另一种读图方式,这里不绝对说就这么几种,那么就谈谈个人对每种图片浏览模式说说自己在实际使用和工作中的一些理解,以及这些模式在实际设计中,哪一种…