热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

RSocket学习(二):HTTPVSWebSocketVSRSocket

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

在比对 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 学习(一):初探



推荐阅读
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 如何基于ggplot2构建相关系数矩阵热图以及一个友情故事
    本文介绍了如何在rstudio中安装ggplot2,并使用ggplot2构建相关系数矩阵热图。同时,通过一个友情故事,讲述了真爱难觅的故事背后的数据量化和皮尔逊相关系数的概念。故事中的小伙伴们在本科时参加各种考试,其中有些沉迷网络游戏,有些热爱体育,通过他们的故事,展示了不同兴趣和特长对学习和成绩的影响。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
author-avatar
so杨xi
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有