RSocket 学习(一):初探

RSocket是一种二进制传输协议,支持多种交互模型如流和推送,提供连接恢复和应用程序流控制。其特点包括异步消息驱动、低延迟、高效性能、多语言支持和传输层灵活性。适用于需要高效、稳定网络通信的场景,如物联网应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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技术栈】

更多精彩内容请关注扫码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值