netty学习第一课

news2024/11/22 1:13:15

技术主题

Netty是一个基于Java NIO(非阻塞 I/O)框架的网络编程框架。它提供了一系列的高级网络编程API,使得开发者可以非常容易地实现高性能、高可靠性的网络应用。Netty具有非常好的可扩展性和灵活性,能够很好地支持多种协议和数据格式。它被广泛应用于互联网领域的服务器开发,如Web服务器、游戏服务器、聊天服务器等。

技术应用

我们在语音转文字的需求中,涉及到长链接,借助websocket来实现的一种全双工通信协议。
Netty框架可以用来实现WebSocket协议通信的服务器端。Netty的优秀设计和高性能可以使开发者更加方便地实现WebSocket服务器端,支持高并发和持久连接,同时还支持多种协议和数据格式的转换。
语音转文字需要不断地接收实时音频流,并且需要快速地对音频进行处理和识别转换,常规的HTTP协议可能无法满足实时性的要求。WebSocket是一种全双工通信协议,可以在客户端和服务器之间建立实时、持久的连接,同时支持双向数据传输,因此能够满足语音转文字实时性要求的需求。
使用WebSocket实现语音转文字的过程是,在客户端使用WebRTC或者是录音API获取到实时音频流,将音频流通过WebSocket协议传输到服务器端。服务器端可以对音频流进行实时处理、转换和识别,把转换结果通过WebSocket协议发送到客户端,客户端再将转换结果展示给用户。从而实现实时语音转换的功能。

技术原理

技术原理一:Netty和Tomcat有什么区别?

Netty和Tomcat最大的区别就是通信协议,Tomcat是基于http协议的,他的实质是一个基于http协议的web容器,但是netty不一样,他能通过编程自定义各种协议,因为netty能够通过codec自己来编码/解码字节流,完成类似redis的功能,这样是netty和tomcat的最大不同。
tomcat从第六版本升级支持了nio模式,相比旧的bio模式,并发性能得到了很大提高。

技术原理二:为什么Netty受欢迎?

当一个连接建立之后,他有两个步骤要做,第一步是接收完客户端发过来的全部数据,第二步是服务端处理完请求业务之后返回response给客户端。区别主要还是在第一步。
在BIO中,等待客户端发数据这个过程是阻塞的,这样就造成了一个线程只能处理一个请求的情况,而机器能支持的最大线程数是有限的,这就是为什么BIO不能支持高并发的原因。
而NIO中,当一个Socket建立好之后,Thread并不会阻塞去接受这个Socket,而是将这个请求交给Selector,Selector会不断的去遍历所有的Socket,一旦有一个Socket建立完成,他会通知Thread,然后Thread处理完数据再返回给客户端-这个过程是不阻塞的,这样就让一个Thread处理更多的请求了。

技术原理三:五种常见的IO模型

1、BIO,同步阻塞IO,阻塞整个步骤,如果连接少,他的延迟是最低的,因为一个线程只处理一个连接,适用于少连接且延迟低的场景,比如说数据库连接。
2、NIO,同步非阻塞IO,阻塞业务处理但不阻塞数据接收,适用于高并发并且处理简单的场景,比如聊天软件
3、多路复用IO,他的两个步骤是分开的,也就是说,一个连接可能他的数据接收是线程a完成的,数据处理是线程b完成的,他比BIO能处理更多请求
4、信号驱动IO,这种IO模型主要用在嵌入式开发,不参与。
5、异步IO,他的数据请求和数据处理都是异步,数据请求一次返回一次,适用于长连接的业务场景

技术管理四:Netty为什么传输快

Netty的传输快其实也是依赖了NIO的一个特性-零拷贝。我们知道,java的内存有堆内存、栈内存和字符串常量池等等,其中堆内存是占用内存空间最大的一块,也是java对象存放的地方,一般我们的数据如果需要从IO读取到堆内存,中间需要经过Socket缓冲区,也就是说一个数据会被拷贝两次才能到达他的终点,如果数据量大,就会造成不必要的资源浪费。
传统数据拷贝
在这里插入图片描述
零拷贝
在这里插入图片描述

Netty针对这种情况,使用了NIO的另一大特性-零拷贝,当他需要接收数据的时候,他会在堆内存之外开辟一块内存,数据直接从IO读到了那块内存中,在netty里面通过ByteBuf可以直接对这些数据进行直接操作,从而加快了传输速度。

技术管理五:为什么说Netty封装好

Channel通道

在这里插入图片描述
1、Channel,表示一个连接,可以理解为每一个请求,就是一个Channel。
2、ChannelHandler,核心处理业务就在这里,用于处理业务请求。
3、ChannelHandlerContext,用于传输业务数据。
4、ChannelPipeline,用于保存处理过程需要用到的ChannelHandler和ChannelHandlerContext。
5、ByteBuf是一个存储字节的容器,最大特点就是使用方便,它既有自己的读索引和写索引,方便你对整段字节缓存进行读写,也支持get/set,方便你对其中每一个字节进行读写,他的数据结构如下图所示:

技术管理六:Netty并发性好

阻塞IO的通信方式:
在这里插入图片描述
非阻塞IO的通信方式:
在这里插入图片描述
netty的通信方式:
在这里插入图片描述

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

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

相关文章

Fiddler抓包工具之fiddler的介绍及安装

Fiddler简介 Fiddler是比较好用的web代理调试工具之一,它能记录并检查所有客户端与服务端的HTTP/HTTPS请求,能够设置断点,篡改及伪造Request/Response的数据,修改hosts,限制网速,http请求性能统计&#xff…

从零实现一个数据库(DataBase) Go语言实现版 7.空闲列表: 重用页

英文源地址 由于我们的B树时不可变的, 每次对kv存储的更新都会在路径上创建新节点, 而不是更新当前节点, 从而使一些节点无法从最新版本访问到.我们需要从旧版本中重用这些不可访问的节点, 否则, 数据库文件将无限增长. 设计空闲列表 为了重用这些页, 我们将添加一个持久化存…

python处理字符串、文本实例及注释

1、多个界定符切割字符串 代码 line = asdf fjdk; afed, fjek,asdf, foo import re re.split(r[;,\s]\s*, line) 结果 在上面的例子中,分隔符可以是逗号,分号或者是空格,并且后面紧跟着任意个的空格。只要这个模式被找到,那么匹配的分隔符两边的实体都会被当成是结果中…

面了个20k的自动化测试,从腾讯出来的果然都有两把刷子···

现在找个会自动化测试的人真是难呀,10个里面有8个写了会自动化,但一问就是三不知 公司前段时间缺人,也面了不少测试,前面一开始瞄准的就是中级的水准,也没指望来大牛,提供的薪资在15-20k,面试的…

技巧:如何查看github的热门趋势和star排行

目录 1. 查看github的热门趋势2. 查看github的star排行3. 如何查看项目star增长曲线 1. 查看github的热门趋势 手动找到入口,打开github,登录后,找到Explore并点击进入,找到Trending切换,列出的就是github当天所有语言…

目标检测常用模型之R-CNN、Fast R-CNN、Faster R-CNN

文章目录 一、模型分类1. 一阶段目标检测2. 二阶段目标检测 二、常见模型1. R-CNN2. Fast R-CNN3. Faster R-CNN 一、模型分类 2012年卷积神经网络(Convolutional Neural Networks, CNNs)的兴起将目标检测领域推向了新的台阶。基于CNNs的目标检测算法主要有两条技术发展路线&am…

国外顶尖高校、企业分享人工智能自学课程英文原课程分享

人工智能无疑已经是当下最火热的方向,在很多领域已经融入我们生活,ChatGPT,Midjourney只是其中一个细分热点。目前这个领域,虽说国内也有不少课程,但是大部分源头还得从英文资料中找。如何学到最新最强得人工智能技能,…

Mongodb——快速入门,2个小时足够了

目录 1、Mongodb概述 1.1、为何使用Mongodb? 1.2、业务应用场景 1.3、Mongodb和MySQL的区别 2、Mongodb安装 2.1、Windows系统中安装启动 3、Mongodb的操作 3.1、数据库操作 3.2、集合操作 3.2.1、集合显式创建 3.2.2、集合的隐式创建 3.2.3集合的删除 …

k8s进阶3——资源配额、资源限制

文章目录 一、基本了解1.1 资源计算1.2 调度机制1.3 服务质量等级 二、资源配额 ResourceQuota2.1 支持的限制资源2.2 配额作用域2.3 资源配额选型2.3.1 计算资源配额2.3.2 存储资源配额2.3.3 对象数量配额 三、资源限制 LimitRange3.1 限制资源大小值3.2 设置限制默认值3.3 限…

buu [NPUCTF2020]共 模 攻 击 1

题目描述: task: hint: 题目分析: 先看hint(提示)这一部分,标题已经提示了是共模攻击,看到有e1,e2,c1,c2,n也可以想到是共模攻击,之后得到c,继续往下做 此时有点不知如何下手,e 256 并且 gcd(e // 4,p…

接口测试工具Postman接口测试图文教程(超详细)

目录 一、前言 二、Postman安装和使用 三、请求方式 四、资金记录接口实例演示 一、前言 在前后端分离开发时,后端工作人员完成系统接口开发后,需要与前端人员对接,测试调试接口,验证接口的正确性可用性。而这要求前端开发进度…

games103——作业4

实验四主要使用 Shallow Wave 模拟流体 完整项目已上传至github。 文章目录 Height Feild(高度场)更新高度场更新速度场 Shallow Wave EquationDiscretization(离散化)一阶导数二阶导数 Discretized Shallow Wave EquationSolution 1Solution 2Pressure(压强)Viscosity(粘滞) 算…

​性能测试基础——性能测试方案

前面所说的测试分析等准备工作实际上最终目的是制定测试方案,测试方案一般包括: 项目的简要说明、项目系统结构、项目的业务结构、以及项目的性能需求、测试环境数据以及测试策略方法、测试案例、测试人员进度安排以及测试风险预估等等。 下面是一个一般…

FreeRTOS创建静态任务教程及所遇到的问题解决方法

静态任务和动态任务的区别 相对于动态任务,静态任务不需要动态分配内存,而是手动指定一个静态内存缓冲区,并在任务生命周期中一直使用该缓冲区。这可以避免动态内存分配时可能出现的内存碎片和内存泄漏问题,提高了系统的稳定性。…

【Python lxml、BeautifulSoup和html.parser区别介绍】零基础也能轻松掌握的学习路线与参考资料

区别介绍 (1)lxml lxml是Python的一个XML解析库,它基于libxml2和libxslt库构建,可以读取、操作和输出XML文档。lxml具有很强的性能和稳定性,在处理较大的XML文件时表现尤佳,并且支持XPath、CSS选择器等高…

PHP复习资料(未完待续)

(未完待续,请持续关注此板块) 【计科三四】雪课堂PHP期末模拟题:https://ks.wjx.top/vm/tUAmjxq.aspx# 【计科一二】PHP第一章练习题 https://ks.wjx.top/vm/QnjHad4.aspx# 【计科一二】PHP第二章练习题 https://ks.wjx.top/vm/h2…

ggplot绘制带误差棒、置信区间的柱状图,并调整颜色为渐变

ggplot绘制带误差棒、置信区间的柱状图,并调整颜色为渐变 简单绘制柱状图控制柱状宽度,间距调整颜色渐变简单绘制柱状图 要在ggplot中绘制带有置信区间的柱状图,你可以使用geom_bar和geom_errorbar函数来完成。下面是一个示例代码: library(ggplot2)# 创建一个示例数据集…

【LeetCode热题100】打卡第1天:两数之和

文章目录 两数之和⛅前言🔒题目🔑题解 两数之和 ⛅前言 大家好,我是知识汲取者,欢迎来到我们的LeetCode热题100刷题专栏! 精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与…

《操作系统》期末最全复习题及解释答案

文章目录 选择题填空题简答题程序题综合题1.银行家算法2.页面置换算法3.进程调度算法4.磁盘调度算法5.求物理/逻辑地址6.分页存储管理7.可变分区分配算法 选择题 若信号量S的初值为2,且有3个进程共享此信号量,则S的取值范围是(B )…

Downie 4 4.6.17 MAC上最新最好用的一款视频下载工具

Downie for Mac 简介 Downie是Mac下一个简单的下载管理器,可以让您快速将不同的视频网站上的视频下载并保存到电脑磁盘里然后使用您的默认媒体播放器观看它们。 Downie 4 下载 Downie 4 for Mac Downie 4 for Mac软件特点 支持许多站点 -当前支持1000多个不同的…