netty学习第一课

技术主题

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的通信方式:
在这里插入图片描述

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

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

相关文章

数字图像处理①基于ADMM的全变分去噪算法

文章目录 1. Problem2. 仿真结果3. MATLAB算法4. 源码地址参考文献 1. Problem 在图像处理中,图像信号总会因为各种原因受到噪声的干扰,其中高斯噪声就是典型的干扰类型之一。 针对图像去噪的模型有很多种,其中全变分模型被认为是最有效的模…

linux中断

一 Linux中断原理 Linux中断(Interrupt)是指在计算机执行过程中,由于某些事件发生(例如硬件请求、错误、异常等),CPU暂停当前正在执行的程序,转而执行相应的处理程序的过程。中断是计算机多任务…

Flask+表格静态展示

Python网页开发(持续更新ing…) 诸神缄默不语-个人CSDN博文目录 本文的需求场景是:我现在有一个JSON格式的表格,这个具体格式不重要相信你们能看懂其他格式的表格怎么改。总之我想用PythonFlask提取这个表格,并展示在…

【网络编程一】初识网络:IP与端口号 网络模型

目录 🌟需要知道 一、基础概念 🌈1、IP地址与端口号 🌈2、五元组 二、协议分层 🌈1、OSI七层网络网络模型 🌈2、TCP/IP五层(四层)模型 🌈3、封装和分用(重点!) &…

软件测试基础篇

文章目录 一、软件测试的生命周期二、BUGBUG的描述BUG的级别BUG生命周期产生争执怎么办?如何开始第一次测试测试的执行和BUG的管理 一、软件测试的生命周期 软件测试的生命周期: 1.需求分析:需求是否完整,需求是否正确 2.测试计划&#xff…

串口屏-迪文10寸T5串口屏数据交互

效果演示 为了便于理解 建议先看上篇博客 点击跳转到上一篇博客 正式开始 1 打开DGUS 2 如图点击文本显示 数据变量 3 填写数据地址 按步骤操作 3-1 先点击框选1处 3-2 再点击框选2处改地址 我改的1000 3-3 设置完直接导出 插入U盘替换DWSET文件夹文件(这一步不理解去看上一…

C++ set类成员函数介绍 (set和multiset)

目录 🤔set模板介绍: 🤔特点: 🤔set的成员函数: 😊set构造函数: 🔍代码实例: 🔍运行结果: 😊 set赋值函数&#xf…

Linux——线程的同步与互斥

目录 模拟抢火车票的过程 代码示例 thread.cc Thread.hpp 运行结果 分析原因 tickets减到-2的本质 解决抢票出错的方案 临界资源的概念 原子性的概念 加锁 定义 初始化 销毁 代码形式如下 代码示例1: 代码示例2: 总结 如何看待锁 申…

【C++】STL中stack的用法及模拟实现

目录 一、stack的简介二、stack的使用三、stack的模拟实现 一、stack的简介 stack是一种容器适配器,专门用在后进先出操作的上下文中环境中,其中的元素只允许从容器固定的一端进行插入和删除操作。stack是作为容器适配器来实现的,容器适配器…

信息安全实践1.3(HTTPS)

前言 做这个实验对Tomcat的版本有要求,最好是使用Tomcat8。因为我之前使用Tomcat10,然后一直做不出来。 要求 部署Web服务器端HTTPS功能,通过网络嗅探分析HTTPS通过SSL实施安全保护的效果 关键步骤 首先要给tomcat配置https,也…

Unity3D安装:离线安装 Unity

推荐:将 NSDT场景编辑器 加入你的3D工具链 3D工具集: NSDT简石数字孪生 在没有 Hub 的情况下离线安装 Unity Unity 下载助手 (Download Assistant) 支持离线部署。在这种部署方式中,可下载用于安装 Unity 的所有文件,然后生成脚本…

采购申请审批测试

采购申请审批的配置并不难,但是总会有原因导致业务无审批策略,而且这个配置也比较脆弱,有时同步也会出现问题,小编利用这篇操作记录下测试结果。 1、项目类别的审批策略分类 下图是审批策略分类-项目类别不给值,测试…

(浙大陈越版)数据结构 第三章 树(上) 3.4 小白专场:树的同构(PTA编程题讲解)

题意理解和二叉树表示 给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换变成T2,则称两棵树是“同构”的。 eg1:现请你判断如下两棵树(左侧为T1,右侧为T2)是否为同构树? 显然T1可以通过有限次左右孩子…

如何利用IDEA将Git分支代码回退到指定历史版本

一、背景 作为一名后端开发,相信大家一定遇到过这样的情景,代码开发人员过多,并且开发分支过多,导致代码版本管理困难,这样就难免遇到一些代码合并出错,比如,当我提交了本次修改到本地和远程分…

jsp页面调试

现象: 访问jsp页面, 页面为空, 网络请求显示失败, 控制台打印错误net::ERR_INCOMPLETE_CHUNKED_ENCODING 200 分析: 错误描述:编码模块不完整,返回浏览器的流不完整 可能得原因: 1、网络是否稳定 2、服务器端是否有对响应数据做限制,比如…

photoshop矫正扫描图片的倾斜问题以及修改图片内容

由于工程原因,资料需要重新梳理 1.扫描工程表格到电脑中 2.在ps中导入表格内容(表格有时候是倾斜的) 需要修正为正常状态,即垂直状态 设置步骤: 1.调整ps的背景颜色与所在图片的背景颜色一致 用吸管工具&#xff…

【thingsboard+NodeRed+chirpstack】实现Lora节点设备的数据上下行通讯

本文主要实现基于 thingsboard+NodeRed+chirpstack 实现 lora设备的数据上下行通讯。 NodeRed作为mqtt桥接器,在开源的社区版 thingsboard上实现 这里写目录标题 LoRa 设备上下行通讯方案数据上行数据下行Device 层面创建设备时,要添加 relation规则链层面灯控模块规则链规则…

Sentinel降级规则

1.降级规则简介 官方文档 熔断降级概述 除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。一个服务常常会调用别的模块,可能是另外的一个远程服务、数据库,或者第三方 API 等。例如,支付的…

华为OD机试之处理器问题(Java源码)

处理器问题 题目描述 某公司研发了一款高性能AI处理器。每台物理设备具备8颗AI处理器,编号分别为0、1、2、3、4、5、6、7。 编号0-3的处理器处于同一个链路中,编号4-7的处理器处于另外一个链路中,不通链路中的处理器不能通信。 如下图所示。…

基于html+css的图展示97

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…