RSocket 学习(一):初探

简介: RSocket 学习(一):初探

一. 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个响应者,每个方向一个。
相关文章
|
存储 Dubbo Java
由浅入深Dubbo网络通信深入解析 2
由浅入深Dubbo网络通信深入解析
73 1
|
存储 缓存 编解码
由浅入深Dubbo网络通信深入解析 1
由浅入深Dubbo网络通信深入解析
71 0
|
30天前
|
前端开发 Java C++
RSocket vs WebSocket:Spring Boot 3.3 中的两大实时通信利器
本文介绍了在 Spring Boot 3.3 中使用 RSocket 和 WebSocket 实现实时通信的方法。RSocket 是一种高效的网络通信协议,支持多种通信模式,适用于微服务和流式数据传输。WebSocket 则是一种标准协议,支持全双工通信,适合实时数据更新场景。文章通过一个完整的示例,展示了如何配置项目、实现前后端交互和消息传递,并提供了详细的代码示例。通过这些技术,可以大幅提升系统的响应速度和处理效率。
|
2月前
|
消息中间件 存储 Java
SpringCloud基础9——服务异步通信-高级篇
消息可靠性、死信交换机、惰性队列、MQ集群
SpringCloud基础9——服务异步通信-高级篇
|
Dubbo Java 应用服务中间件
由浅入深Dubbo网络通信协议大全
由浅入深Dubbo网络通信协议大全
134 0
|
前端开发 Java 应用服务中间件
SpringBoot整合Netty搭建高性能Websocket服务器(实现聊天功能)
之前使用Springboot整合了websocket,实现了一个后端向前端推送信息的基本小案例,这篇文章主要是增加了一个新的框架就是Netty,实现一个高性能的websocket服务器,并结合前端代码,实现一个基本的聊天功能。你可以根据自己的业务需求进行更改。 这里假设你已经了解了Netty和websocket的相关知识,仅仅是想通过Springboot来整合他们。根据之前大家的需求,代码已经上传到了github上。在文末给出。 废话不多说,直接看步骤代码。
1872 0
SpringBoot整合Netty搭建高性能Websocket服务器(实现聊天功能)
|
数据安全/隐私保护
Netty实战(十四)WebSocket协议(二)
我们之前说过为了将 ChannelHandler 安装到 ChannelPipeline 中,需要扩展了ChannelInitializer,并实现 initChannel()方法
187 0
|
负载均衡 安全 Cloud Native
2023-5-15-gRpc框架学习
2023-5-15-gRpc框架学习
151 0
探秘Netty5:基于Netty自己动手实现RPC框架
大厨小鲜——基于Netty自己动手实现RPC框架 钱文品 Good news everyone! ​关注他 71 人赞了该文章 今天我们要来做一道小菜,这道菜就是RPC通讯框架。
|
安全 测试技术 API
一个快速开发网络通信的框架:Netty
一个快速开发网络通信的框架:Netty
138 0