RSocket——Http协议的替代者

1. 简介

RSocket是一种二进制的点对点通讯协议,是一种新的网络通讯第七层协议。旨在用于分布式应用程序中。从这个意义上讲,RSocket是HTTP等其余协议的替代方案。它是一种基于Reactive Streams规范具备异步,背压的双向,多路复用,断线重连,基于消息等特性。它由Facebook,Netifi和Pivotal等工程师开发,提供Java,JavaScript,C ++和Kotlin等实现。java

2. 背景

说到这里就有一些疑问了,为何要搞这个协议?难道程序员吃饱了撑得搞点新东西折腾本身?上面提到了Reactive Streams规范。若是你对这个规范不熟悉就须要经过 https://felord.cn 补补课了。这是java领域新的响应式规范,Reactor 3 、RxJava 都是该规范的实现。webflux、hystrix 总据说过吧。java 9 也吸取了该规范的一些精华。也就是说咱们如今能够实现网络通讯上的响应式了。响应式一个重要的特性就是背压(backpressure)。http通讯中服务端接收到过多的请求很容易会过载,严重时致使宕机。而经过背压处理能够选择性的响应请求来避免这种状况。还有http协议是无状态的,只要有请求不论是有效的仍是无效的,是不是重复的,服务器都会进行处理直到完成。若是使用响应式必定程度会大大减小这些无心义的请求。有时候咱们须要创建起长链接。就须要借助于Websocket来实现。若是使用RSocket就很容易创建链接双方的管道。还有其它很是多的场景这里再也不一一列举。程序员

3. 特性

其实上面也说明了一些RSocket的特性。这里简单总结一下:web

  • 具备语言无关性的二进制通讯协议
  • 异步非阻塞消息驱动通讯,高性能
  • 实现了网络通讯的背压处理,在此基础上进行流量控制、链接恢复
  • 自然支持双向通讯
  • 更加适合分布式通讯场景

4. RSocket四种交互模型

RSocket定义了四种交互模型来弥补Http协议的不足之处:服务器

  • Fire-and-Forget:优化请求/响应,在不须要响应时很是有用,例如非关键事件日志记录。
  • Request/Response:相似Http的请求/响应模型 可是具备Http没有的优势,它是异步和多路复用的。
  • Request/Stream:单个请求能够接收多个响应。例如获取视频列表、获取目录中的产品
  • Channel: 该模型模型提供双向通讯。在此模型中,消息流在两个方向上异步流动。例如发生更改时,从服务器向客户端发出增量/差别

5. 前景

随着响应式愈来愈被说起,RSocket在网络通讯的前途是不可限量的。有众多诸如Facebook、Pivotal等一线大厂的背书。Spring framework最近的几回更新都特别对其进行了支持。知名rpc框架Dubbo从3开始也针对RSocket进行了适配。目前RSocket还处于候选版本,尚未正式版。相对资料较少。并且须要对Reactive Streams 规范熟悉。相对来讲目前学习曲线仍是比较陡峭的。不过咱们获取能够从中借鉴一些解决问题的思路。网络

关注公众号:Felordcn,获取更多资讯框架

相关文章
相关标签/搜索