一篇文章了解RSocket协议

article/2025/8/18 2:17:30

RSocket是一个类似于HTTP的通讯协议。在了解Rsocket协议之前,先简单介绍下HTTP协议。

之所以推出springboot的技术,一个原因是因为前后端设计的分离。因为基于HTTP协议可以直接返回REST数据内容。

REST是一个简单且容易使用的异构处理架构,REST对于浏览器有这非常好的支持,同时也便于开发者进行测试。然而,当前所采用的REST架构大多是基于HTTP/1.1协议实现的,它存着这如下的问题。

HTTP简介

  • HTTP/1.1采用的是重文本传输,在某些场景下会给微服务带来巨大的负荷。 
  • HTTP属于无状态协议,对于一些附加头信息往往只能采用非压缩的方式进行传输。
    • HTTP/1.1是基于TCP协议设计实现的,而TCP协议在进行处理的时候为了及时的回收资源,所以每次都及时的释放连接,连接一旦断开,自然HTTP协议就成了无状态的协议了。所以就有了session的概念来区分。
  • HTTP/1.1协议属于一元操作,所以用户每发送一个请求才可以得到一个响应。(Request-Per-Response),在未接收到响应之前,不能够发送其他请求。(如果当前的资源已经耗尽了,于是就必须等待有连接释放才可以操作。)
  • HTTP协议是基于TCP协议完成,所以需要采用三次握手和四次挥手的方式来保证连接的可靠性,这样的操作会非常耗时,从而影响微服务的整体性能。

在HTTP /3.0标准之前所有的HTTP协议都是基于TCP协议实现的。所以在HTTP/1.0协议版本中每一次用户请求对服务器都需要创建有一个新的TCP连接(三次握手和四次挥手)。而为了解决TCP性能问题,在HTTP/1.1协议版本中提出了TCP连接复用的支持,但是此时的连接复用在每次只允许一个用户的请求进行处理,而当该请求处理完成之后才允许其他请求继续使用此TCP连接进行请求处理。(相当于没有叫号的银行排队,排在该窗口的前面那个人不知道什么时候能办理完成业务)。在HTTP/2.0中对连接操作进行了进一步的改善,允许一个TCP连接同时实现多个客户端的请求处理,这样即便是某一个请求操作耗时,但是也不会影响整体的性能。

所以在HTTP/3.0协议版本中使用QUIC作为新的传输层协议,QUIC基于UDP协议实现,同时也自带多路复用结构。 

但是,性能的问题可以依靠数量来解决,既然HTTP协议的性能不高,那么就需要多增加一些服务节点,多个节点统一提供集群服务。

RSocket简介

        虽然在浏览器和后端之间,使用Rest是最佳的做法,但是为了避免以上的问题,所以需要采用一些比Rest更好的方式来实现微服务之间的通讯处理。在这样的背景下,有Facebook,Netifi,和Pivotal等工程师开发了一种新的协议-RSocket通信协议。

该协议采用二进制点对点数据传输,主要应用于分布式架构之中,是一种基于Reactive Stream规范标准实现的新的网络通信OSI模型第七层(应用层)协议。随着响应式编程技术的不断普及,RSocket协议在网络通信(特别是移动通讯)中会有着非常重要的发展前景。

 RSocket协议具有多路复用(Multiplexed)、双向流(BIdirectional Streaming)、流控(Flow Control)、连接恢复(Socket Resumption)、异步消息传递(Asynchronous Message Passing)、传输层解耦(Transport independent)等主要特点。

1、多路复用二进制协议(Mutiplexed Binary Protocol)

         多路复用是当今通讯行业的宠儿,包括各种的组件应用都存在有大量的多路复用的实现。(Redis缓存数据库)

        在HTTP/2.0协议中重点的问题是解决了TCP连接多路复用的问题,但是在TCP协议中一切的数据都是以文本的形式进行传输,所以在实际的开发中就会存在有数据传输过大以及传输结构受限的问题,而RSocket是一个二进制协议,可以方便的进行各种数据的传输,同时没有数据格式的限制,用户也可以根据自身的需要进行压缩处理。

        在RSocket中将消息分为数据(data)和元数据(metadata)两个组成部分,这样可以保证在高速数据传输下依然可以对外暴露少量元数据给其他服务调用(服务监控)。

 RSocket实现了双向流通讯支持,利用双向流可以实现服务端与客户端之间的通讯处理,这样在请求和响应的处理过程中,客户端可以向服务器发送请求,服务器端也可以向客户端发送请求。

 2、RSocket四种数据交互模式:

1、Request-And-Response:请求/响应,类似于HTTP通信特点,提供异步通信与多路复用的支持。

2、Request-Response-Stream:请求/流式响应,一个请求对应多个流式的响应,例如:获取视频列表和产品列表;

3、Fire-And-Forget:异步触发,不需要响应,可以用于进行日志记录 。

4、Channer(bi-directional streams):双向异步通讯,消息流在服务器端与客户端两个方向上异步流动。

3、流控(Flow Control)

        在分布式的项目环境中,如果说生产者生产的数据过快,就会导致消费者无法进行及时处理,最终有可能出现内存与CPU的占用率增高,从而出现服务端或客户端无响应的情况。如果没有进行良好的实现控制,那么久有可能由于雪崩问题而导致整个应用集群的瘫痪。为了避免这样情况的出现,就需要一套流控机制来协调生产者与消费者之间的处理速度。

        而RSocket中提供了Stream Level流量控制,由于RSocket作为一个应用层协议,所以采取的并不是基于字节的网络层实现流控,而是基于应用层帧数的流量控制。(控制生产者生产的消息数量)。

        雪崩:由于向其他服务调用,其他服务无法提供服务,进而导致本服务崩溃。

 4、连接恢复

         由于移动网络的兴起,所以在网络连接的稳定性上就出现了较大的挑战,当网络出现故障后应该及时进行连接恢复,在RSocket中提供有连接恢复(Connection Resumption)功能,同时为了简化用户操作,在连接恢复成功后不会有任何的感知,而在连接恢复失败时才会通过onError事件触发相应的回调函数,这样在进行Stream时可以保持响应,同时减少重复信息的传输,因为在多路复用的结构中如果重复传输则意味着网络压力的增加。

        RSokcet中提供的"Sokcet Resumption"恢复机制,恢复实现的核心原理在于重新建立网络连接后不从头处理用户请求,客户端和服务端需要能够在连接中断开后的一段时间内自动保存该Connection上的Stream状态。而在恢复连接后,客户端会将此状态信息发送给服务器端,服务器端会进行恢复判断,如果成功恢复则继续之前的Stream操作。

5、异步消息传递(Asynchromous Message Passing)

        RSocket的协议在进行数据传输时采用的是异步消息传递的形式,所传输的内容为Frame(应用层帧,例如:FrameHeader RESUME等),同时在RSocket传输中并不像HTTP协议那样包含有明确的目标访问路径,所有访问全部由路由模块负责实现。

        RSocket协议在数据传输时消息使用帧来进行封装,每个帧可能是请求内容,响应内容或与协议相关的数据信息,而一个应用消息可能被切分为多个不同的片段来保存在一个帧中。

6、传输层解耦合(Transport independent)

        RSocket协议是一个应用层的面向连接协议,不依赖于传输层协议,所以可以由用户自由选择不同的应用场景。例如:在进行数据中心构建时可以使用TCP处理,而进行浏览器异步交互时,可以使用WebSocket处理,在进行HTTP服务时可以使用HTTP/2.0处理。 


http://chatgpt.dhexx.cn/article/ZT8N8IWY.shtml

相关文章

RSocket 学习(一):初探

girl.jpg 一. RSocket 介绍 RSocket 是一种二进制字节流传输协议,位于 OSI 七层模型中的5、6层,对应 TCP/IP 模型中的应用层。RSocket 并没有规定必须使用何种底层传输层协议,开发者可以使用不同的底层传输协议,包括 TCP、WebSock…

RSocket——Http协议的替代者

1. 简介 RSocket是一种二进制的点对点通信协议,是一种新的网络通信第七层协议。旨在用于分布式应用程序中。从这个意义上讲,RSocket是HTTP等其他协议的替代方案。它是一种基于Reactive Streams规范具有异步,背压的双向,多路复用&…

java-语言学习-eclipse安装java汉化包

java的汉化: 1.打开链接:https://www.eclipse.org/babel/ 2.进入网页后,往下翻一点,看到一个download(下图红框所示),点开。 3.进入一个页面后,往下翻一点点,看到有几…

安装Eclipse的中文语言包

安装Eclipse的中文语言包 下载语言包 1、进入网址 http://www.eclipse.org/babel 2、对应版本下载中文语言包 3、替换Eclipse软件安装文件的features、plugins,再次启动加载 4、替换出现The Eclipse executable launcher was unable to locate its companion l…

Eclipse 官方简体中文语言包下载地址及安装方法

转自: http://www.cnblogs.com/yaotong/archive/2011/12/28/2305421.html 打开Eclipse Babel Project 主页: http://www.eclipse.org/babel/downloads.php 根据Eclipse的版本找到相应的插件地址,复制下来。 进入Eclipse,选择Help->Install New Softwa…

Eclipse-中文语言包

Eclipse-中文语言包 效果图 版本使用中文语言包 下载过程 点击如下 打开插件市场 填写链接 填写此链接地址https://download.eclipse.org/technology/babel/update-site/latest/到下图 简体中文选择 简体中文选择 选择允许协议 安装代码提示插件codota 是什么 打开插件市场 搜…

Eclipse汉化 中文语言包下载安装 Babel Language Pack

相关链接 Java & Eclipse & Maven 使用配置方法 Eclipse平台上新建Java项目使用Junit测试 如何在Eclipse平台使用git从GitHub上下载文件至本地及管理本地git项目 Eclipse汉化 中文语言包下载安装 Babel Language Pack 点击进入Eclipse Babel Project 下拉可见 选择与自…

eclipse中文语言包安装(别看网上那些乱七八糟的,我这个最简单)

一、安装好JDK和eclispe。(这个步骤不用多说了) 二、步骤 1、找语言包并下载:https://www.eclipse.org/babel/downloads.php 找到汉化文件下载备用。 2、把下载好的文件复制到 eclipse的dropins文件夹中。 3、启动eclispe,汉化…

Eclipse语言包在官网下载不了-解决方案

可能家里的网络不好,在官网语言包一直出现这个问题,网上找了很久没找到解决方案,应该是家里网络和对方服务器不对付。就发现有下面这个选项,选了nanjing的节点就解决了。

eclipse汉化-设置语言包

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。 一、通过插件的方式进行eclipse的汉化 1、登陆Eclipse Babel Project Downloads | The Eclipse Foundationhttps://ww…

基于遥感影像的道路提取论文、开源代码和数据集汇总

文章目录 前言2017DeepRoadMapperTopology Loss 2018RoadTraceriterative-deep-learning 2019Leveraging Crowdsourced GPS Data for Road Extraction from Aerial ImageryRoadNetRoadTaggerGenerative Graph Transformerroad_connectivityNL-LinkNet: Toward Lighter but More…

遥感影像云检测-云检测数据集信息及下载

常用云检测数据集信息及下载 1.LandSat7云量评估数据集2.LandSat8-Biome生物群落云量评估数据集3.LandSat8-38Cloud数据集4.高分系列-GF1-WHU遥感影像云数据集5.Sentinel-2 Cloud Mask Catalogue5.1.数据介绍5.2.数据集目录编排5.3.统计数据5.4.错误和不确定性 6.CESBIO数据集(…

AI实战营第二期 第七节 《语义分割与MMSegmentation》——笔记8

文章目录 摘要主要特性 案例什么是语义分割应用:无人驾驶汽车应用:人像分割应用:智能遥感应用 : 医疗影像分析 三种分割的区别语义分割的基本思路按颜色分割逐像素份分类全卷积网络 Fully Convolutional Network 2015存在问题 基于多层级特征…

【毕业设计_课程设计】基于 U-Net 网络的遥感图像语义分割(源码+论文)

文章目录 0 项目说明1 研究目的2 研究方法3 研究结论4 论文目录5 项目工程 0 项目说明 **基于 U-Net 网络的遥感图像语义分割 ** 提示:适合用于课程设计或毕业设计,工作量达标,源码开放 实验训练使用 Anaconda 版 Python 3.7 下的 TensorF…

EISeg——应用于语义分割的自动标注软件

1、基本介绍 EISeg(Efficient Interactive Segmentation)是以RITM及EdgeFlow算法为基础,基于飞桨开发的一个高效智能的交互式分割标注软件。涵盖了通用、人像、遥感、医疗等不同方向的高质量交互式分割模型,方便开发者快速实现语义及实例标签的标注&…

基于paddleSeg的自定义遥感数据语义分割——以DLRSD为例

转自AI Studio,原文链接:基于paddleSeg的自定义遥感数据语义分割——以DLRSD为例 - 飞桨AI Studio 基于paddleseg 2.1使用自定义数据集DLRSD,其他遥感数据集实现训练、测试、推理脚本版任务 数据格式准备 DLRSD数据集 基于UCMerced_LandUse数据集进行…

【计算机视觉】最全语义分割模型总结(从FCN到deeplabv3+)

文章目录 一、前言1.1 语义分割 二、FCN:CNN语义分割的开山之作2.1 结构2.2 特点 三、Deeplab_v13.1 前言3.2 特点 四、U-Net4.1 结构4.2 特点 五、Seg-Net5.1 结构5.2 特点 六、Deeplab_v26.1 结构6.2 特点6.3 Fcis6.3.1 特点 七、RefineNet7.1 结构7.2 特点 八、L…

语义分割网络系列2——Unet

目录 1 Unet网络介绍1.1 Unet论文1.2 简介1.3 6大特点 2 Unet网络3种不同的实现方式2.1 Unet网络的class实现(mIou)2.2 Unet网络的layer的实现(mIou)2.3 第3种实现方法(存在问题,验证集准确率一直不变&…

毕业设计 U-Net遥感图像语义分割(源码+论文)

文章目录 0 项目说明1 研究目的2 研究方法3 研究结论4 论文目录5 项目源码6 最后 0 项目说明 **基于 U-Net 网络的遥感图像语义分割 ** 提示:适合用于课程设计或毕业设计,工作量达标,源码开放 实验训练使用 Anaconda 版 Python 3.7 下的 T…

基于深度学习的遥感影像语义分割数据预处理

基于深度学习的遥感影像语义分割数据预处理 第一次处理数据,不熟练,仅供参考 数据预处理工具:Arcgis 第一步:下载遥感影像tif数据 根据实际需求选择感兴趣的遥感影像区域 数据来源:Google卫星影像 第二步&#xff1…