RSocket 学习(一):初探

article/2025/8/18 2:12:58

girl.jpg

一. RSocket 介绍

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

RSocket 采用二进制格式,从而保证了传输的高效、节省带宽。RSocket 中的 R 是指 Reactive。因此,通过基于响应式流语义的流控制,RSocket 保证了消息传输中的双方不会因为请求的压力过大而崩溃。

RSocket 支持常见的响应式框架:RxJava、Spring Reactor。

二. RSocket 特点

与传统的 Http 协议不同,RSocket 支持多种交互模型,例如流和推送,而不是整个单个连接上的简单请求/响应。

RSocket 还支持连接的恢复,它允许流在不同的传输连接上恢复,这在连接频繁断开、切换和重新连接时特别有用。特别是在移动端的场景下使用。

RSocket 特点包括如下:

  • 消息驱动:RSocket 的网络通信是异步的,并将所有通信建模为单个网络连接上的多路消息流,并且在等待响应时从不同步阻塞。

  • 多种交互模型:RSocket 包括四种交互模型 Fire-and-Forget、Request/Response、Request/Stream、Channel。

  • 取消:所有流(包括请求/响应)都支持取消,以便高效地清理服务器(响应者)资源。

  • 可恢复性:RSocket 支持会话恢复,允许通过简单的握手通过新的传输连接恢复客户机/服务器会话。

  • 应用程序流程控制:RSocket 支持两种形式的应用程序级流控制,以帮助保护客户端和服务器资源不被淹没:“响应流” request(n) 异步拉取和租用。

  • 多语言支持:支持 Java、Kotlin、JavaScript、Go、.Net、C++。

  • 传输层灵活性:RSocket 允许开发者根据环境、设备功能和性能需求使用不同的底层传输层。

  • 效率与性能:低效率地使用网络资源的协议(重复握手和连接设置以及降低开销、臃肿的消息格式等)会极大地增加系统的感知延迟。此外,如果没有流控制语义,当依赖服务的速度减慢时,一个写得不好的模块可能会溢出系统的其余部分,从而可能导致重试风暴,给系统带来进一步的压力。Hystrix 是一个试图解决同步请求/响应问题解决方案。然而,它的开销和复杂性是有代价的。RSocket 通过支持非阻塞、双工、异步应用程序通信,并通过对来自任何语言的多个传输进行流控制,减少感知延迟并提高系统效率。RSocket 使用二进制编码提高 CPU 和内存效率,避免握手和相关的往返网络开销。

三. RSocket 使用的术语

  • Frame: 包含请求、响应或协议处理的单个消息。

  • Fragment: 应用程序消息的一部分,已被分区以包含在一个帧中。

  • Transport: 用来传输 RSocket 协议。包括 WebSockets、TCP 或 Aeron 之一。

  • Stream: 操作单元(请求/响应等)。

  • Payload: 流消息(上游或下游)。包含与先前请求创建的流关联的数据。在响应流和 Rx中,相当于是“onNext”事件。

  • Complete: 在流上发送的终端事件,表示成功完成。在响应流和 Rx 中,相当于是“onComplete”事件。

  • Connection: 客户端和服务器之间传输会话的实例。

  • Requester: 发送请求的一方。一个连接最多有2个请求者,每个方向一个。

  • Responder: 接收请求的一方。一个连接最多有2个响应者,每个方向一个。

关注【Java与Android技术栈】

更多精彩内容请关注扫码


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

相关文章

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…

语义分割—遥感影像数据标签制作(ARCGIS)

目录 制作标签 转为tif格式 制作标签 1.新建文件夹链接 2.右键新建的文件夹,新建一个shp文件 3.要素类型选择面要素,并为shp文件命名 此处可以配置与依赖图层相同的坐标系,也可以在转为.tif的时候修改环境里的两个选项统一坐标系 4.右键文…