RSocket 学习(二):HTTP VS WebSocket VS RSocket

article/2025/8/18 2:11:33

在比对 HTTP、WebSocket、RSocket 之前,我们先通过下面这张 OSI 七层模型的图快速梳理一下网络通信的面貌, 以便后续更好地理解它们。

osi model.png

一. HTTP 的特性

超文本传输协议(英语:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。

HTTP 已经演化出了很多版本,它们中的大部分都是向下兼容的。在 RFC 2145 中描述了 HTTP 版本号的用法。客户端在请求的开始告诉服务器它采用的协议版本号,而后者则在响应中采用相同或者更早的协议版本。

1.1 HTTP/0.9

已过时。只接受 GET 一种请求方法,没有在通讯中指定版本号,且不支持请求头。

1.2 HTTP/1.0

这是第一个在通讯中指定版本号的 HTTP 协议版本。

  • 协议版本信息现在会随着每个请求发送(HTTP/1.0被追加到了GET行)。

  • 状态码会在响应开始时发送,使浏览器能了解请求执行成功或失败,并相应调整行为(如更新或使用本地缓存)。

  • 引入了 HTTP 头的概念,无论是对于请求还是响应,允许传输元数据,使协议变得非常灵活,更具扩展性。

  • 在新 HTTP 头的帮助下,具备了传输除纯文本 HTML 文件以外其他类型文档的能力。

1.3 HTTP/1.1

在1997年初,HTTP1.1 标准发布,就在HTTP/1.0 发布的几个月后。

HTTP/1.1 默认采用持续连接(Connection: keep-alive),能很好地配合代理服务器工作。还支持以管道方式在同时发送多个请求,以便降低线路负载,提高传输速度。

HTTP/1.1 相较于 HTTP/1.0 协议的区别主要体现在:

  • 缓存处理

  • 带宽优化及网络连接的使用

  • 错误通知的管理

  • 消息在网络中的发送

  • 互联网地址的维护

  • 安全性及完整性

1.4 HTTP/2

HTTP/2 在 HTTP/1.1 有几处基本的不同:

  • HTTP/2 是二进制协议而不是文本协议。不再可读,也不可无障碍的手动创建,改善的优化技术现在可被实施。

  • 这是一个复用协议。并行的请求能在同一个链接中处理,移除了 HTTP/1.x 中顺序和阻塞的约束。

  • 压缩了headers。因为headers在一系列请求中常常是相似的,其移除了重复和传输重复数据的成本。

  • 其允许服务器在客户端缓存中填充数据,通过一个叫服务器推送(Server Push)的机制来提前请求。

1.5 HTTP/3

与其前任 HTTP/1.1 和 HTTP/2 不同,在 HTTP/3 中,将弃用 TCP 协议,改为使用基于 UDP 协议的 QUIC 协议实现。

HTTP/3 的优点包括:

  • 基于 UDP 协议,所以连接时间更短。

  • 解决 HTTP/2 中存在的队头阻塞问题。HTTP/2 在单个 TCP 连接上使用了多路复用,受到 TCP 拥塞控制的影响,少量的丢包就可能导致整个 TCP 连接上的所有流被阻塞。在这种情况下,传递数据包的延迟会导致整个连接被延迟。

  • 能够更好地检测和修复数据包丢失。

  • 传输速度更快,加载时间更短并且连接更稳定

二. WebSocket 的特性

WebSocket 是一种网络传输协议,可在单个TCP连接上进行全双工通信,位于 OSI 模型的应用层。WebSocket 允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输。

WebSocket 与 HTTP 的不同之处:

  • WebSocket 提供全双工通信,可以通过重用已建立的连接通道将数据从客户端发送到服务器,或从服务器发送到客户端。连接保持活动状态,直到被客户端或服务器终止。而 HTTP 提供半双工通信。

  • WebSocket 的消息模式是双向的,HTTP 的消息模式是 Request-Response 模式。

  • WebSocket 支持消息的 Push,HTTP 中不能直接使用 Push。

  • 如果使用加密的 WebSocket 连接,则在 WebSocket 安全连接中使用传输层安全性(TLS)可确保在将浏览器配置为使用显式代理服务器时发出 HTTP CONNECT 命令。这将在 WebSocket安全客户端和 WebSocket 服务器之间建立一个隧道,该隧道通过 HTTP 代理提供低级别的端到端TCP通信。

三. RSocket 与这些协议的对比

3.1 与 HTTP/1.1 & HTTP/2 对比

  • HTTP 为构建应用程序,需要在其之上定义应用程序语义。尽管 REST 普遍存在,但 REST 不足以定义应用程序语义。

  • HTTP 不支持应用层的流控制。HTTP/2 中加入了针对 HTTP Stream 的基于字节流窗口大小的 Flow Control。HTTP/2 的 Flow Control 只定义了 WINDOW_UPDATE 帧的格式和语义,并没有规定接收方如何决定何时发送帧、发送什么样的值,也没有规定发送方如何选择发送包。RSocket 支持应用层 Flow Control,采取的并不是基于字节的网络层流控,而是基于应用层帧数的流量控制。

  • HTTP 不支持双向传输(HTTP/2 的 Server Push 并不是真正意义上的 Push),HTTP 需要服务端的推送必须要依赖 WebSocket。而 RSocket 建立长连接之后,任何一方都可以是 Requester 或 Responder。

3.2 与 TCP & QUIC 对比

  • 它们并没有框架或应用程序语义。

  • 必须提供一个应用协议(例如 Netty 虽然简化了 TCP 层的编程,但是需要自定义协议)

3.3 与 WebSocket 对比

  • WebSocket 没有应用程序语义,只有框架。

  • 必须提供一个应用协议。

参考资料

  1. 超文本传输协议

  2. HTTP的发展

  3. HTTP/3

  4. WebSocket

该系列的相关文章:

RSocket 学习(一):初探


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

相关文章

基于RSocket协议实现客户端与服务端通信

RSocket基础开发demo package com.pshdhx.rsocket;import io.rsocket.Payload; import io.rsocket.RSocket; import io.rsocket.util.DefaultPayload; import lombok.extern.slf4j.Slf4j; import org.reactivestreams.Publisher; import reactor.core.publisher.Flux; import …

响应式编程之网络新约:RSocket

响应式reactive是Java中高效应用的下一个前沿,但它目前主要有两个障碍:数据访问和网络。RSocket是一种新的第7层语言无关的应用网络协议(解决后者),它由Facebook,Netifi和Pivotal等工程师开发,提…

一篇文章了解RSocket协议

RSocket是一个类似于HTTP的通讯协议。在了解Rsocket协议之前,先简单介绍下HTTP协议。 之所以推出springboot的技术,一个原因是因为前后端设计的分离。因为基于HTTP协议可以直接返回REST数据内容。 REST是一个简单且容易使用的异构处理架构,R…

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…