vlambda博客
学习文章列表

响应式应用新协议RSocket

RSocket是一种用于反应式应用程序的新的网络协议。

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

该协议专门设计用于与Reactive风格应用配合使用,这些应用程序基本上是非阻塞的,并且通常(但不总是)与异步行为配对。使所谓Reactive背压: 即发布者无法向订户发送数据直到该订户已经准备就绪的想法,这是与“异步”的关键区别。

官方定义:RSocket 是基于 reactive stream flow control 的双向的、多路的、基于消息的、二进制通讯协议。它提供了 4 种交互模式:

  • request - response:一个请求,一个响应。现在的 Restful 服务既是如此;

  • fire-and-forget:对于那些不关心结果的请求,直接返回;

  • request – stream:一个请求,多次结果返回;

  • channel:服务器可以发多个请求给客户端,客户端也可以发多个结果给服务器;

几个特点:

  • 可取消:请求和响应都可取消,能够高效的清理系统资源;

  • 可中断后继续:如果被调用方卡住了,请求方可断开后,过一会再过来重试;

  • 可租赁:响应者可根据自己的实际情况来控制调用方的频率,其实就是响应式编程中的背压的实现;

支持语言:








Driver Transport(s) Version Core Support Resumption Leasing RPC
rsocket-java
  • aeron (UDP)

  • akka

  • reactor-netty 
    (TCP, websocket)

1.0 x

x
rsocket-js
  • nodejs net (TCP)

  • plain (websocket)

1.0 x x
x
rsocket-net
  • System.Net 
    (TCP, websocket)

1.0 x

x
rsocket-cpp
  • Folly (TCP)

1.0 x x

rsocket-go
  • Go NET (TCP)

1.0



rsocket-kotlin
  • reactor-netty 
    (TCP, websocket)

  • OkHttp 
    (websocket client only)

1.0 x


rsocket-py
  • asyncio (TCP)

1.0