Netty核心知识总结

Netty是一个高性能、异步事件驱动的NIO框架,它提供了对TCP、UDP和文件传输的支持,作为一个异步NIO框架,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机制,用户可以方便的主动获取或者通过通知机制获得IO操作结果。

基本介绍
Netty是一个高性能、异步事件驱动的NIO框架,它提供了对TCP、UDP和文件传输的支持,作为一个异步NIO框架,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机制,用户可以方便的主动获取或者通过通知机制获得IO操作结果。

作为当前最流行的NIO框架,Netty在互联网领域、大数据分布式计算领域、游戏行业、通信行业等获得了广泛的应用,一些业界著名的开源组件也基于Netty的NIO框架构建。

GitHub:https://github.com/netty/netty

官网:https://netty.io/

「Netty的优缺点」
之前我们使用JAVA NIO的时候会有一些问题:

JDK NIO的BUG,例如臭名昭著的epoll bug,它会导致Selector空轮询,最终导致CPU 100%,官方声称在JDK 1.6版本的update18修复了该问题,但是直到JDK 1.7版本该问题仍旧存在,只不过该BUG发生概率降低了一些而已,它并没有得到根本性解决。
客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常码流的处理等问题需要处理。
Netty的优点:

API使用简单,开发门槛低;
功能强大,预置了多种编解码功能,支持多种主流协议;
定制能力强,可以通过ChannelHandler对通信框架进行灵活地扩展;
性能高,通过与其他业界主流的NIO框架对比,Netty的综合性能最优;
成熟、稳定,Netty修复了已经发现的所有JDK NIO BUG,业务开发人员不需要再为NIO的BUG而烦恼;
社区活跃,版本迭代周期短,发现的BUG可以被及时修复,同时,更多的新功能会加入;
经历了大规模的商业应用考验,质量得到验证。
Netty有一个最重要的缺点:大版本不兼容,3.x/4.x同时维护,5.x放弃维护,主要原因是Netty抛弃了Jboss单独发展了。

「Netty的应用产品」
Netty 经过很多出名产品在线上的大规模验证,其健壮性和稳定性都被业界认可,其中典型的产品有一下几个

服务治理:Apache Dubbo、GRPC。
大数据:Hbase、Spark、Flink、Storm。
搜索引擎:Elasticsearch。
消息队列:RocketMQ、ActiveMQ。
Spring WebFlux是伴随Spring framework 5提出的网络框架解决方案,也是基于Netty实现。

还有更多优秀的产品可以参考下面网址:https://netty.io/wiki/related-projects.html。

入门案例
构建一个简单的应用程序:客户端将消息发送给服务器,而服务器再将消息会送给客户端。

首先,引入 Maven 依赖

<dependency> 
       <groupId>io.netty</groupId> 
       <artifactId>netty-all</artifactId> 
/dependency> 

「服务端:」
Netty 服务器都需要以下两部分:

至少一个ChannelHandler,该组件实现了服务器对从客户端接收的数据的处理,即它的业务逻辑。
配置引导服务器的启动代码,它会将服务器绑定到它要监听连接请求的端口上。
「ChannelHandler服务端业务逻辑」

因为你的 Echo 服务器会响应传入的消息,所以它需要实现 ChannelInboundHandler 接口,用来定义响应入站事件的方法。

这个简单的应用程序只需要用到少量的这些方法,所以继承 ChannelInboundHandlerAdapter 类也就足够了,它提供了 ChannelInboundHandler 的默认实现。

我们需要的方法是:

channelRead(),对于每个传入的消息都要调用;
channelReadComplete(),通知ChannelInboundHandler最后一次对channelRead()的调用是当前批量读取中的最后一条消息;
exceptionCaught(),在读取操作期间,有异常抛出时会调用。
该 Echo 服务器的 ChannelHandler 实现是 EchoServerHandler:
在这里插入图片描述
「引导服务器」
引导过程中所需要的步骤如下:

创建一个 ServerBootstrap 的实例以引导和绑定服务器;
创建并分配一个 NioEventLoopGroup 实例以进行事件的处理,如接受新连接以及读/写数据;
指定服务器绑定的本地的 InetSocketAddress;
使用一个 EchoServerHandler 的实例初始化每一个新的 Channel;
调用 ServerBootstrap.bind()方法以绑定服务器。
在这里插入图片描述
「客户端:」
Echo 客户端将会:

连接到服务器;
发送一个或者多个消息;
对于每个消息,等待并接收从服务器发回的相同的消息;
关闭连接。
编写客户端所涉及的两个主要代码部分也是业务逻辑和引导

「ChannelHandler实现客户端逻辑」
如同服务器,客户端将拥有一个用来处理数据的 ChannelInboundHandler。

在这 个场景下,你将扩展 SimpleChannelInboundHandler 类以处理所有必须的任务。

这要求重写下面的方法:

channelActive()——在到服务器的连接已经建立之后将被调用;
channelRead0()——当从服务器接收到一条消息时被调用;
exceptionCaught()——在处理过程中引发异常时被调用。

在这里插入图片描述
「引导客户端」
在这里插入图片描述
为初始化客户端,创建了一个 Bootstrap 实例;
为进行事件处理分配了一个 NioEventLoopGroup 实例,其中事件处理包括创建新的连接以及处理入站和出站数据;
为服务器连接创建了一个 InetSocketAddress 实例;
当连接被建立时,一个 EchoClientHandler 实例会被安装到ChannelPipeline 中;
在一切都设置完成后,调用 Bootstrap.connect()方法连接到远程节点;

基本架构
Netty 的逻辑处理架构为典型网络分层架构设计,共分为网络通信层、事件调度层、服务编排层,每一层各司其职。
在这里插入图片描述
分层讲解:https://www.51cto.com/article/683699.html

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ElasticSearch篇---第三篇

系列文章目录 文章目录 系列文章目录前言一、了解ElasticSearch 深翻页的问题及解决吗?二、熟悉ElasticSearch 性能优化三、ElasticSearch 查询优化手段有哪些?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这…

Linux 和 macOS 的主要区别在哪几个方面呢?

(꒪ꇴ꒪ )&#xff0c;Hello我是祐言QAQ我的博客主页&#xff1a;C/C语言&#xff0c;数据结构&#xff0c;Linux基础&#xff0c;ARM开发板&#xff0c;网络编程等领域UP&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff0c;让我们成为一个强大的攻城狮&#xff0…

【信息安全】-个人敏感信息、个人信息、个人金融信息

文章目录 个人敏感信息个人敏感信息判定举例 个人信息个人信息判定举例 个人金融信息内容a) 账户信息指账户及账户相关信息b) 鉴别信息c) 金融交易信息d) 个人身份信息e) 财产信息f) 借贷信息g) 其他信息: 出处 个人敏感信息 个人敏感信息判定 个人敏感信息是指一旦泄露、非法…

ppt转换成pdf文件

最近用到了&#xff0c;记一下&#xff1b; ppt转pdf分为两种情况: 小于2007版本的 .ppt格式&#xff08;2003&#xff09; 与大于2007版本的 .pptx格式&#xff08;2007&#xff09; .ppt格式为 二进制文件 .pptx格式为xml格式&#xff0c;在java中有不同的jar包需要使用 引入…

MyBatis 常见面试题

目录 1.MyBatis——概述1.1.什么是 ORM 框架&#xff1f;1.2.✨谈谈对 MyBatis 的理解。1.3.使用 MyBatis 相对于直接使用 SQL 有哪些优点&#xff1f;1.4.MyBatis 有什么优缺点&#xff1f;1.5.✨MyBatis 的分层结构是什么样的&#xff1f;1.6.✨MyBatis 的执行流程是什么样的…

这个柴油发电机大招,再不知道就晚了!

随着能源需求的不断增长和环境问题的日益凸显&#xff0c;柴油发电机在各个行业中扮演着关键的角色&#xff0c;为企业和社会提供可靠的电力支持。 然而&#xff0c;为了确保发电机的高效运行和延长其使用寿命&#xff0c;监控和维护变得至关重要。 客户案例 制造业 某制造业…

Java 控制台命令导入本地jar包到maven本地库中

1、新建POM文件&#xff0c;在maven库路径下创建POM文件 注意&#xff1a;这个路径需要与第2点导入命令中的grouoId、artifactId和version写法对应 Path&#xff1a;D:\RomanData\repository\com\sae\mail\1.0.0\mail-1.0.0.pom <?xml version"1.0" encoding&q…

电脑屏幕亮度怎么调?学会4个方法,轻松调节亮度!

“我总是感觉我电脑屏幕太暗了&#xff0c;有时候如果光线好一点&#xff0c;会看不清电脑屏幕。有什么可以把电脑调亮一点的简单方法吗&#xff1f;” 在我们的日常生活中&#xff0c;电脑已经成为我们工作、学习、娱乐不可或缺的工具。然而&#xff0c;长时间面对电脑屏幕可能…

删除误提交的 git commit

背景描述 某次的意外 commit 中误将密码写到代码中并且 push 到了 remote repo 里面, 本文将围绕这个场景讨论如何弥补. 模拟误提交操作 在 Gitee 创建一个新的 Repo, clone 到本地 git clone https://gitee.com/lpwm/myrepo.git创建两个文件, commit 后 push 到 remote 作…

2022年第十一届数学建模国际赛小美赛B题序列的遗传过程解题全过程文档及程序

2022年第十一届数学建模国际赛小美赛 B题 序列的遗传过程 原题再现&#xff1a; 序列同源性是指DNA、RNA或蛋白质序列之间的生物同源性&#xff0c;根据生命进化史中的共同祖先定义[1]。DNA、RNA或蛋白质之间的同源性通常根据它们的核苷酸或氨基酸序列相似性来推断。显著的相…

【EI征稿中|SPIE出版】 第四届传感器与信息技术国际学术会议(ICSI 2024)

第四届传感器与信息技术国际学术会议&#xff08;ICSI 2024&#xff09; 2024 4th International Conference on Sensors and Information Technology&#xff08;ICSI 2024&#xff09; 第四届传感器与信息技术国际学术会议&#xff08;ICSI 2024&#xff09;将于2024年1月5…

VS2019shi用动态链接库

.dll文件路径包含 C/C常规-------->附加包含目录 将动态库项目文件路径包含在附加包含目录。 .lib文件路径包含 连接器------------>输入------------------>附加依赖项 .lib文件名字输出附加依赖项 连接器------------>常规------------------>附加库目录 添加…

软著项目推荐 深度学习的水果识别 opencv python

文章目录 0 前言2 开发简介3 识别原理3.1 传统图像识别原理3.2 深度学习水果识别 4 数据集5 部分关键代码5.1 处理训练集的数据结构5.2 模型网络结构5.3 训练模型 6 识别效果7 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习…

外包干了8个月,技术退步明显.......

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入武汉某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

开源代驾上门预约小程序源码系统:预约代驾,出行更无忧 附带完整的搭建教程

随着人们生活水平的提高&#xff0c;越来越多的人选择代驾服务。为了方便用户预约代驾&#xff0c;罗峰来给大家分享一款开源代驾上门预约系统。该系统具有以下特色功能&#xff0c;让出行更加无忧。 以下是部分代码示例&#xff1a; 系统特色功能一览&#xff1a;​​​​​​…

【计算机网络笔记】物理层——信道与信道容量

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…

理解依赖注入

1 回顾Spring IoC容器 1.1 Spring IoC容器 Web应用程序由大量的程序组件组成&#xff0c;这些组件一起工作完成业务逻辑的执行。 这些组件通常是一个依赖另一个&#xff0c;互相协作实现所需功能。 Spring提供容器&#xff0c;也就是IoC容器&#xff0c;来管理这些组件&…

万界星空科技MES系统在工业生产中的应用

万界星空科技MES系统在工业生产中的应用广泛。它适用于各类制造业&#xff0c;包括汽车制造、电子制造、注塑、能源化工、航天航空、食品加工、服装纺织、灯具、电线电缆、电机发动机、印刷包装等行业。 在汽车制造领域&#xff0c;MES系统可以实时追踪和控制整个生产过程&…

摄像头选型号指南

镜头选型工具 - HiTools - 海康威视 Hikvisionhttps://www.hikvision.com/cn/support/tools/hitools/cl8a9de13648c56d7f/ 1. 海康威视摄像头选型号指南 海康威视摄像头选型号指南-CSDN博客文章浏览阅读3.7k次。跟客服对话比跟AI对话好不了多少&#xff0c;能噎死人&#xff0…

graphics.h安装后依旧报错

问题解决一&#xff1a; 我在网上找了很多&#xff0c;都说找到graphics.h这个文件&#xff0c;放到include这个目录下&#xff0c;我照做了&#xff0c;然后 当我进行编译时&#xff0c;自动跳到graphics.h这个文件并出现一堆报错 问题解决二&#xff1a; 看一下这两个文件是…