为什么那么多开源软件都用netty来做网络通信编程框架?

news/2024/11/15 13:28:45/文章来源:https://www.cnblogs.com/lhrogerluo/p/18412451

 

1、用netty来做网络通信编程框架而不是我们自己去基于JDK NIO来编程的好处有如下这些:

(1)、netty支持常见的应用层协议(如:HTTP、FTP、DNS等),还可以支持自定义协议;

(2)、netty可以自动解决网络编程当中的粘包与半包问题;

(3)、netty还可以支持流量整形;

(4)、netty对于网络通信当中的异常情况,如断连、idle等情况都预做好了处理;

(5)、netty还解决JDK NIO的一些bugs(如空轮询问题,具体可以见JDK Bugs列表);

(6)、netty在API使用的友好度上更好;

(7)、netty还在很多细节上做了不少的代码级优化措施。

 

2、netty是如何支持协议定制的?

  netty通过层次化以及对自定义编解码可插拔式的设计,我们可以自己编写一堆handler链放进去就可以自己完成自定义的编解码。

3、为什么网络编程当中需要解决粘包与半包的问题?

  在计算机网络当中,我们传输数据的最小单元为一个MTU:

  (1)、写入的字节大小大于套接字的发送缓存区大小。
  (2)、进行MSS大小的TCP分段
  (3)、以太网帧的payload大于MTU进行IP分段,如下:

 

4、netty是如何实现流量整形的?

    具体是通过TrafficShapingHandler来实现,具体做法为采用一些限流措施,来防止流量瞬间过大,引发压垮下游系统的风险。

5、JDK的空轮询的BUG是怎么回事?

    即使无客户端连接,NIO照样不断的从select本应该阻塞的Selector.select()中wake up出来,导致CPU100%问题,后续版本的JDK一定程序缓解了该BUG,但问题一直存在(而且JDK官方给出的issues的回复是:Won't fix)。

6、Netty的编程API友好在哪?

  创建一个简单的HTTP server也许只要极少的代码,另外要自定义协议也是十分简单。

7、Netty存在一些代码细节上的编码优化使得性能更好

  如采用AdaptiveRecvByteBufAllocator来进行自适应的内存分配,还有对堆外内存的管理处理上也很高效,代码中还有针台各种平台及系统版本所做的一些细节优化等等等。

 

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

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

相关文章

USB总线-Linux内核USB3.0设备控制器中断处理程序分析(九)

1.概述 USB设备枚举、请求处理、数据交互都涉及USB设备控制器中断。当有事件发生时,USB设备控制器首先将事件信息通过DMA写入到事件缓冲区中,然后向CPU发出中断,随后CPU调用中断处理函数开始处理中断事件。 2.事件 dwc3 USB设备控制器事件使用dwc3_event数据结构描述,由4个…

通义灵码企业代码补全增强使用实践

通义灵码提供了企业代码补全增强的能⼒,在开发者使⽤通义灵码 IDE 插件的⾏间代码补全时,可以结合企业上传的代码库作为上下⽂进⾏⾏间代码补全,使代码补全更加贴合企业代码规范、业务特点。本⽂将分享如何构建⾼质量的企业代码库,以及开发者在前端和后端开发场景的使⽤实践…

LeetCode算法—分治法

纵有疾风起;人生不言弃思路:分治法的核心思想是“分而治之”,即将一个复杂的问题分成多个较小的子问题,分别求解这些子问题,然后将子问题的解合并,得到原问题的解。具体到求众数的问题上,分治法通过递归地将数组分成两部分,分别找出每一部分的众数,最后通过合并步骤来…

学习高校课程-软件设计模式-OOP 和 UML 类图 OOP 与 Java(lec1)

OOP 和 UML 类图 OOP 与 JavaLecture 1:OOP and UML Class DiagramsOOP with Java OOP 和 UML 类图 OOP 与 Java Object-Oriented Programming 面向对象编程Class Hierarchies 类层次结构 Superclass and subclass 超类和子类Pillars of Object-Oriented Programming 面向对象…

路由器刷机踩坑

ssh/telnet 路由器一般是用23端口,也就是telnet。具体如何开启ssh看型号。 breed breed是一个bootloader,在功能上类似于手机的Rec,用于提供一个界面刷入不同分区的镜像(至少不用敲命令行了)。 注意 breed不能用于刷入原厂固件,否则会砖(我就是这么干的)。 这是恩山论坛…

Pbootcms网站挂马解决方案(详细说明)

当你的PbootCMS网站被挂马时,应该立即采取措施来清除恶意代码,并加强系统的安全性,防止未来的攻击。以下是一个详细的解决方案: 1. 备份现有数据 在开始任何修复工作之前,首先备份你的网站数据,包括数据库和文件系统。这一步骤是为了防止在修复过程中丢失重要数据。 2. 检…

SVN在MacOS下报E230001错误

#macos #rider for Mac #SVN #E230001svn为什么会报E230001错误呢?根据详细错误信息Server SSL certificate verification failed: certificate issued知道这是https证书有问题,不用管它证书了,这里介绍一种简单的方法。 首先,打开终端(terminal,mac os/linux一般都是带…

面试-JS Web API - 存储

cookie HTML5存储(localStorage 和 sessionStorage)cookie cookie本身用于浏览器和server通讯的,被借用到本地存储来。可以用document.cookie来修改。同一个变量会覆盖,不同变量会追加。localStorage 和 sessionStorage// 保存数据到 localStorage localStorage.getItem(a,10…

MySQL8的新特性

一 字典数据与资源管理1.1 数据字典 以前MySQL都是采用元数据文件、非事务性表结构或者是存储引擎特有的方式来存储字典数据,这些字典数据通常都是以数据对象为主,比如说最常见的表结构信息等。 在MySQL8.0中,这些字典数据都被移动到拥有InnoDB存储引擎的事务性表中进行存储…

通义灵码获得国产 AI 编码工具最高成绩丨阿里云云原生 8 月产品月报

《阿里云云原生每月动态》,从趋势热点、产品新功能、服务客户、开源与开发者动态等方面,为企业提供数字化的路径与指南。云原生月度动态 云原生是企业数字创新的最短路径。 《阿里云云原生每月动态》,从趋势热点、产品新功能、服务客户、开源与开发者动态等方面,为企业提供…

执行yarn命令的时候报错: error Error: certificate has expired

完整错误:原因是:SSL证书过期 执行命令关闭验证: yarn config set strict-ssl false

《抽象代数》系列之群论入门

一、重要性 1.1 领域意义 群论是数学的一个分支,主要研究代数结构中的群、环、域等。尽管它看似抽象,但在编程领域,群论有着广泛的应用和深刻的意义。算法设计与优化:群论在算法设计中发挥着重要作用。例如,在密码学中,群论被用于设计安全的加密算法,如椭圆曲线密码学,…