Aru*_*thi 9 websocket reactive rsocket
我最近遇到过"反应套接字"一词.到目前为止,我曾经认为websockets是完全成熟的异步风格的方法.
什么是无功插座.
这个链接(http://reactivesocket.io/)甚至讨论了websockets的比较.
Sre*_*ith 12
WebSocket 和 RSocket 都是具有双向、多路复用、双工通信的协议。但两者都在不同的层面上发挥作用。
WebSocket 是一种基于 TCP 的低级通信协议。它定义了如何将字节流转换为帧。但是 WebSocket 消息本身没有关于如何路由或处理它的说明。因此,我们需要在 websocket 之上运行的消息协议,在应用层实现双向通信。
RSocket是一种完全反应式的应用程序级协议,它运行在字节流传输上,例如 TCP、WebSocket、UDP 或其他。它通过网络提供应用程序流控制,以防止中断并提高弹性。RSocket 采用具有非阻塞背压的异步流处理思想,其中发生故障的组件将不是简单地丢弃流量,而是将其压力传达给上游组件,让它们减轻负载。
RSocket在网络边界上实现了Reactive Streams规范。它是具有帧,会话恢复和内置反压功能的应用程序级通信协议,可在网络上运行。
RSocket与传输无关。RSocket可以在Websockets,TCP,HTTP / 2和Aeron上运行。
Websocket不提供应用程序级背压,仅提供基于TCP的字节级背压。Websocket也仅提供框架,不提供应用程序语义。开发人员应建立与Websocket交互的应用程序协议。
RSocket提供了框架,应用程序语义,应用程序级背压,并且它不受特定传输的约束。
有关创建RSocket的动机的更多信息,请在RSocket网站上查看动机文档。
TLDR:L4 协议,用于网络的 TCP。
Websocket 是单字节流、基于帧的协议,具有非常紧凑的标头。
它在每个重要的协议方面都依赖于 web/http:基于 http 的握手(完整往返,延迟不理想)、除二进制帧之外的文本帧、压缩支持(用于低吞吐量/高延迟连接)、强制帧内容屏蔽与传统的非 tls http 代理兼容。
帧可以被分段,以便客户端和服务器更好地利用内存;
流量控制仅来自 TCP 的字节级别,并且不会传播到用户空间。
由于 websocket 只是单字节流传输,因此它需要完整的应用程序协议才能发挥作用,并且应用程序级流量控制方案才能可扩展。
采用明智的方式,稳定的 websocket 实现可用于大多数操作系统/架构,所有浏览器都支持该协议,并且如果任何流量需要在互联网跳跃中生存,则该协议是首选解决方案。
TLDR:L5 协议,主要是云/数据中心通信,具有出色的吞吐量/延迟特性:巨大的吞吐量,同时保持延迟<几毫秒。
RSocket 是会话层协议,通过任何能够按顺序传输字节的传输(tcp、unix 套接字以及 websocket)提供复用流控制的二进制消息流。
低延迟是基石,协议为此提供了多种功能:
RSocket. Practice下文)。因为二进制流交互/多路复用是开箱即用的,所以在顶部实现应用程序 RPC 很简单 - 只需要数据序列化/反序列化(使用 protobuf 数据编码的mstreams-rpc)。
该协议在语义上与 http2 兼容,这意味着它也与 GRPC 兼容(给定 protobuf 用于消息编码)。
仅在 JVM 上有用,因为反应流在 JVM 上很流行,并且在几个稳定的实现中实际上很有用:rxjava、project-reactor、smallrye-mutiny。
RSocket/RSocket-java基于springboot的project-reactor。
自然的期望是一流的吞吐量,不幸的是 RSocket/RSocket-java没有做到这一点,因此在 http2 之上的性能 比 10 多年前的 GRPC(其前身 Stubby 从 ~2001 年开始使用)差:闲聊的 Web 协议。
碎片:没有服务器内存使用或延迟改善,因为 RSocket/RSocket-java 以毫无意义的方式实现它 - 帧在传递到下游之前总是重新组装。
GRPC 兼容性:不存在。
2022 年建议:更好地坚持使用 GRPC。
| 归档时间: |
|
| 查看次数: |
2050 次 |
| 最近记录: |