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

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

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


image.png

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月前
|
Java Maven Kotlin
vertx的学习总结7之用kotlin 与vertx搞一个简单的http
本文介绍了如何使用Kotlin和Vert.x创建一个简单的HTTP服务器,包括设置路由、处理GET和POST请求,以及如何使用HTML表单发送数据。
33 2
vertx的学习总结7之用kotlin 与vertx搞一个简单的http
|
29天前
|
前端开发 Java C++
RSocket vs WebSocket:Spring Boot 3.3 中的两大实时通信利器
本文介绍了在 Spring Boot 3.3 中使用 RSocket 和 WebSocket 实现实时通信的方法。RSocket 是一种高效的网络通信协议,支持多种通信模式,适用于微服务和流式数据传输。WebSocket 则是一种标准协议,支持全双工通信,适合实时数据更新场景。文章通过一个完整的示例,展示了如何配置项目、实现前后端交互和消息传递,并提供了详细的代码示例。通过这些技术,可以大幅提升系统的响应速度和处理效率。
|
6月前
|
网络协议 JavaScript 安全
第十一篇 前沿趋势与展望:深入探索GraphQL、RESTful API、WebSocket、SSE及QUIC与HTTP/3
第十一篇 前沿趋势与展望:深入探索GraphQL、RESTful API、WebSocket、SSE及QUIC与HTTP/3
107 1
|
30天前
|
网络协议 API 网络安全
Web实时通信的学习之旅:轮询、WebSocket、SSE的区别以及优缺点
Web实时通信的学习之旅:轮询、WebSocket、SSE的区别以及优缺点
137 0
|
30天前
|
网络协议 安全 JavaScript
Web实时通信的学习之旅:WebSocket入门指南及示例演示
Web实时通信的学习之旅:WebSocket入门指南及示例演示
121 0
|
6月前
|
监控 Unix 应用服务中间件
Android-音视频学习系列-(八)基于-Nginx-搭建(rtmp、http)直播服务器
Android-音视频学习系列-(八)基于-Nginx-搭建(rtmp、http)直播服务器
|
3月前
|
Linux Python
【Azure 应用服务】Azure App Service For Linux 上实现 Python Flask Web Socket 项目 Http/Https
【Azure 应用服务】Azure App Service For Linux 上实现 Python Flask Web Socket 项目 Http/Https
|
4月前
|
存储 缓存 JavaScript
WebSocket 学习
WebSocket是用于创建低延迟、高效率双向通信的协议,适合实时数据传输如即时通讯和在线游戏。它通过一次性握手建立长期连接,允许服务器主动推送数据。WebSocket API包括WebSocket对象和事件处理程序,如onopen、onmessage、onerror和onclose。示例代码展示了如何创建WebSocket连接、发送和接收消息及处理各种事件。WebSocket服务器通常需要特定的框架支持,如Node.js中的`ws`库。使用WebSocket时,前端和后端都可以监听open、close、error和message事件来管理连接状态和数据交换。
85 8
|
5月前
|
缓存 负载均衡 NoSQL
Redis系列学习文章分享---第十四篇(Redis多级缓存--封装Http请求+向tomcat发送http请求+根据商品id对tomcat集群负载均衡)
Redis系列学习文章分享---第十四篇(Redis多级缓存--封装Http请求+向tomcat发送http请求+根据商品id对tomcat集群负载均衡)
81 1
|
5月前
|
XML JSON 安全
对比HTTP与WebSocket
对比HTTP与WebSocket
130 0