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

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

时间:2024-09-13 16:35:43浏览次数:11  
标签:网络通信 netty JDK 自定义 编程 开源 NIO

 

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

 

标签:网络通信,netty,JDK,自定义,编程,开源,NIO
From: https://www.cnblogs.com/lhrogerluo/p/18412451

相关文章

  • Unity人工智能分析话语,及自动学习而产生智能回答:游戏、源码、教程(三合一),完全免费,完全
    Unity人工智能分析话语,及自动学习而产生智能回答:游戏、源码、教程(三合一),完全免费,完全开源。2024年9月13日,自动学习的问答程序开发完成,并通过测试。游戏、源码、教程的三合一,我放到了夸克网盘:https://pan.quark.cn/s/7a753bcef090我不想和任何人说话,任何人不要跟我说话。游戏......
  • 游戏客户端中的网络通信:使用Java实现实时数据交换| 网络通信|Java|游戏客户端
    在现代游戏开发中,Java作为一种强大的编程语言,广泛应用于游戏客户端的开发。Java的跨平台特性、丰富的类库以及强大的社区支持使其成为开发高性能、可维护的游戏客户端的理想选择。从简单的2D游戏到复杂的3D游戏,Java能够提供稳健的解决方案来应对各种挑战。本篇文章将深入探讨如何利......
  • 基于matlab的黄金搜索法【开源/可直接复制粘贴】
    黄金搜索法是一种无须函数导数的数值优化方法。它基于黄金分割比例来选择新的搜索区间,以逐步缩小搜索范围并逼近极值点。在每次迭代中,算法会根据当前搜索区间的长度和黄金分割比例来计算两个新的点,并在这两个点处评估函数值。然后,根据这两个点的函数值比较结果,选择包含更优解(......
  • C# 开源教程带你轻松掌握数据结构与算法
    前言在项目开发过程中,理解数据结构和算法如同掌握盖房子的秘诀。算法不仅能帮助我们编写高效、优质的代码,还能解决项目中遇到的各种难题。给大家推荐一个支持C#的开源免费、新手友好的数据结构与算法入门教程:Hello算法。项目介绍《HelloAlgo》是一本开源免费、新手友好的数......
  • [知识产权] 开源协议
    0引言引言这几年明显可以感受Github、Gitee上优秀的开源项目越来越多,这些开源软件给众多开发者提供了便利,小到个人兴趣爱好的小工具,大到国之重器突破卡脖子,以至于有的开发者调侃自己是面向Github编程。当然,绝大多数开源项目都会附带开源协议,大多数人可能对开源协议不太了解......
  • Github_以太网开源项目verilog-ethernet代码阅读与移植(二)
    实验背景在《Github_以太网开源项目verilog-ethernet代码阅读与移植(一)》中简要介绍了verilog-ethernet开源项目的目录构造等基本信息,下面介绍如何使用与移植步骤。实验内容verilog-ethernet项目的使用与移植准备工作实验步骤打开项目的中README.md文件内容如下:信......
  • 深入浅出ASPvNext开源框架学习视频
    学习目标:从入门到深度剖析.NetCoreABPvNext学习内容:源码目录结构依赖关系及内容ABPvNext第一课:源码目录结构依赖关系及内容DDD理论知识及代码实现ABPvNext第二课:DDD理论知识及代码实现ABP启动流程及模块化深入ABPvNext第三课:ABP启动流程及模块化深入深入动态API......
  • 一个用于管理多个 Node.js 版本的安装和切换开源工具
    大家好,今天给大家分享一个用于管理多个Node.js版本的工具 NVM(NodeVersionManager),它允许开发者在同一台机器上安装和使用不同版本的Node.js,解决了版本兼容性问题,为开发者提供了极大的便利。在开发环境中,特别是在处理多个项目时,每个项目可能依赖于不同版本的Node.js,NVM提供......
  • 零基础入门AI:一键本地运行各种开源大语言模型 - Ollama
    零基础入门AI:一键本地运行各种开源大语言模型-OllamaAI大模型全套学习资料“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了......
  • Gitee上那些开源的WebGIS项目(三):基于webGIS的大气监测系统
    项目介绍本项目是我的本科毕业设计,基于webGIS的大气监测系统,主要是基于ArcgisApiforjs构建了一个大气监测系统,并且通过Deeplearning4j深度学习库构建lstm模型进行空气质量指数预测。主要实现污染物可视化,模型训练,AQI指数预测等。项目地址:https://gitee.com/nimi317该......