简介

RSocket是在华盛顿特区举行的SpringOne平台会议上宣布的,是一种新的第7层语言无关的应用网络协议。它是一种基于Reactive Streams背压的双向,多路复用,基于消息的二进制协议。它由Facebook,Netifi和Pivotal等工程师开发,提供Java,JavaScript,C ++和Kotlin等实现。

开源 RSocket 专为服务而设计。它是一种面向连接的消息驱动协议,在应用程序级别具有内置流控制。它既可以在浏览器中同样使用,也可以在 服务器上使用。这意味着您可以流式传输数据或执行Pub / Sub而无需设置应用程序队列。它也是二进制的。它对文本和二进制数据同样有效,并且对传输的内容负荷进行分段。

该协议专门设计用于与Reactive风格应用配合使用,这些应用程序基本上是非阻塞的,并且通常(但不总是)与异步行为配对。使所谓Reactive背压: 即发布者无法向订户发送数据直到该订户已经准备就绪的想法,这是与“异步”的关键区别。反应式编程(响应式reactive)是 Java 中高效应用的下一个前沿。但有两个主要障碍 - 数据访问和网络。RSocket旨在解决后一个问题,而R2DBC旨在解决前者问题。

HTTP vs RSocket

HTTP的一个重要问题是,它强迫客户端负担起所有责任来处理不同类型的错误上,包括重试逻辑,超时,断路器等。使用Reactive架构构建的应用程序可以提高效率并扩展。

RSocket与HTTP的不同之处在于它定义了四种交互模型:

  1. Fire-and-Forget:优化请求/响应,在不需要响应时非常有用,例如非关键事件日志记录。
  2. 请求/响应:当您发送一个请求并收到一个响应时,就像HTTP一样。即使在这里,该协议也具有优于HTTP的优点,因为它是异步和多路复用的。
  3. 请求/流:类似于返回集合的请求/响应,集合被回送而不是查询直到完成,因此例如发送银行帐号,用实时的帐户事务流进行响应。
  4. 频道:允许任意交互模型的双向消息流。

基于消息意味着协议可以支持单个连接上的多路复用。此外,与TCP一样,它是真正的双向,因此一旦客户端启动与服务器的连接,连接中的双方就变得彼此等同 - 实质上,服务器可以从客户端请求数据。

RSocket 特性

RSocket还支持基于每个消息的流量控制

RSocket还支持基于每个消息的流量控制。在主题演讲中,Facebook工程师Steve Gury表示:

当您发送消息时,您还要指定您能够满足多少响应,并且服务器必须满足该约束,但是当我完成处理这些响应后,我可以要求更多。RSocket也可以在链中工作,因此如果链接多个RSocket连接,流控制将是端到端地工作。

实质上,RSocket解决的问题是跨流进程的背压,即网络上的背压。

当必须在服务网格中调用另一个微服务时会发生什么,我如何保证它不会出现调用一大堆数据,并且它不会尝试向我客户端发送所有这些数据?

RSocket与传输无关,支持TCP,WebSocket和Aeron UDP,支持混合传输协议,不会造成语义损失 - 背压和流量控制都将继续工作。

它还支持连接恢复。建立RSocket连接时,您可以指定先前连接的ID,如果服务器仍在内存中有流,则可以恢复流的消耗。

它是一种消息驱动的二进制协议,在指定网络连接的情况下,请求者 - 响应者交互被分解为一组离散的帧,这些帧中的每一个都封装了某种消息。

框架是二进制的,而不是人类可读的,如 JSON 或XML,为机器到机器的通信提供了显着的效率。与所有消息传递协议一样,消息传递的内容有效负荷只是字节流,因此可以是您想要的任何内容,包括 XML 或JSON。

在Facebook,RSocket用于名为LiveServer的服务,该服务负责响应可被视为GraphQL订阅的实时查询。服务器响应数据,但也响应未来的更新流

RSocket 实例

Demo Java Server:

RSocketFactory.receive().frameDecoder(Frame::retain).acceptor(new PingHandler()).transport(TcpServerTransport.create(7878)).start().block().onClose();

Demo Java Client:

Mono<RSocket> client =RSocketFactory.connect().frameDecoder(Frame::retain).transport(TcpClientTransport.create(7878)).start();PingClient pingClient = new PingClient(client);Recorder recorder = pingClient.startTracker(Duration.ofSeconds(1));int count = 1_000;pingClient.startPingPong(count, recorder).doOnTerminate(() -> System.out.println("Sent " + count + " messages.")).blockLast();

参考:响应式应用新协议RSocket

RSocket一种新的响应式应用新协议相关推荐

  1. html 响应式布局 九宫格,两种方法实现响应式九宫格布局

    html布局以及基础样式代码如下 响应式九宫格 html, body { color:#222; margin:0; padding: 0; text-decoration: none; } ul { ...

  2. Vue添加新的响应式属性

    vm.userProfile = Object.assign({}, vm.userProfile, {age: 27,favoriteColor: 'Vue Green' }) 转载于:https: ...

  3. 浅谈RSocket与响应式编程

    简介: RSocket是高效一个二进制的网络通讯协议,能够满足很多场景下使用.另外,RSocket也是一个激进的响应式捍卫者,激进到连API都跟响应式无缝集成.本文我们将和大家分享RSocket与响应 ...

  4. 响应式Spring Cloud初探

    响应式Spring Cloud初探 分类:工程 原文链接:The Road to Reactive Spring Cloud 作者:  JOSH LONG 译者: helloworldtang 日期: ...

  5. 浅谈Spring5 响应式编程

    目录 为什么是响应式编程 用于响应式编程实现的理想案例 响应流 (Reactive Streams) Spring 5 提供的响应式编程 Spring Web Reactive vs. Spring ...

  6. 美团客户端响应式框架 EasyReact 开源啦

    前言 EasyReact 是一款基于响应式编程范式的客户端开发框架,开发者可以使用此框架轻松地解决客户端的异步问题. 目前 EasyReact 已在美团和大众点评客户端的部分业务中实践,并且持续迭代了 ...

  7. vue项目统一响应_Vue响应式原理及总结

    Vue 的响应式原理是核心是通过 ES5 的保护对象的 Object.defindeProperty 中的访问器属性中的 get 和 set 方法,data 中声明的属性都被添加了访问器属性,当读取 ...

  8. 微服务升级_SpringCloud Alibaba工作笔记0003---理解spring webflux_响应式堆栈_提高微服务吞吐量和伸缩性

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 1. WebFlux介绍 Spring WebFlux 是 Spring Framework 5. ...

  9. 移动端网页开发)------响应式网页

    移动端网页开发 移动端网页开发的两种方案: 响应式网页 开发一个新的网站.使用移动端的布局方式. 响应式网页 概念 同一个网页会根据视口的不同,显示不同的样式. 优缺点 优点 面对不同分辨率的设备比较 ...

最新文章

  1. “httpd未被被识别的服务”的解决办法
  2. C#中try catch中throw ex和throw方式抛出异常有何不同
  3. 【学生信息管理系统】——问题篇
  4. linux美化原理,x-window字体原理及美化
  5. android 获取lanucher 列表
  6. java重命名excel_Java重命名Excel工作表并设置工作表及标签颜色
  7. 怎样通过vb设置透视表多项选择_数据透视表,数据统计分析的利器,你会了吗...
  8. 网页打开共享目录_“馆员说事儿”之三大中文数据库期刊封面、目录、封底下载方法步骤(三)中国知网...
  9. java第七章jdbc课后简答题_jsp编程基础第七章习题
  10. SpringBoot日志logback-spring.xml分环境
  11. BXP 3.11样机安装详细说明(转)
  12. SWMM建模与案例应用
  13. 实现OPEN 哈希表模板类
  14. 想搬去苏州生活了。。
  15. vue 接入天地图并且在地图上画基站扇形覆盖物
  16. 最细致全面架设单机传奇教程
  17. linux 查看内存fru,linux – 查找NIC的网络百分比
  18. android手机怎么投屏到电视盒子,手机钉钉怎么投屏到电视上
  19. 沉睡者IT - 短视频简单无脑玩法,播放量10w+的藏头诗玩法,操作思路分享给你!
  20. 整理文件夹保存同一目录,并统一重命名文件夹名

热门文章

  1. java导入Excel表格数据
  2. 硬件课程设计:基于STM32的多功能播放器之小说阅读
  3. 基于 SpringBoot + MyBatis 的网页版五子棋对战
  4. 客户售后服务工作单管理系统 下载
  5. RabbitMQ安装卸载
  6. 面试汇总-Spring-IOC和AOP
  7. Java:数据库连接池原理
  8. Educational Codeforces Round 138 (A-E)题解
  9. H3 BPM工作流 javaScript 页面展示问题
  10. WT2003S MP3解码芯片 语音芯片 KT403A VS1003替代