RSocket概览
RSocket是一个二进制应用协议,它是异步的,并且基于反应式流(Reactive Streams)。换句话说,RSocket提供了应用程序之间的异步通信,支持与第12章中我们学习的Flux和Mono等反应式类型一致的反应式模型。
作为HTTP协议通信的替代方案,RSocket更加灵活,提供了4种不同的通信模式:请求-响应(request-response)、请求-流(request-stream)、即发即忘(fire-and-forget)和通道(channel)。
请求-响应是RSocket中最为人熟知的通信模型,它模仿了典型的HTTP通信方式。在请求-响应模型中,客户端向服务器发出单一请求,而服务器则以单一响应来回应,如图14.1所示。我们使用Reactor的Mono类型来定义请求和响应。

尽管请求-响应模型看起来与HTTP提供的通信模型一样,但重要的是,RSocket本质上是非阻塞且基于反应式类型的模型。虽然客户端仍然会等待服务器的响应,但在“幕后”,一切都是非阻塞和反应式的,这样可以更高效地利用线程。
请求-流通信模型与请求-响应类似,但客户端向服务器发送了一个请求后,服务器会以流的方式响应,流中可以包含若干值,如图14.2所示。我们使用Mono进行请求,随后使用Flux进行响应。

在某些情况下,客户端可能需要向服务器发送数据,但不需要响应结果。RSocket为这些情况提供了即发即忘模型,如图14.3所示。

在即发即忘模型中,客户端向服务器发送一个请求,但服务器无须返回响应结果。
最后,RSocket的通信模型中最灵活的是通道模型。在通道模型中,客户端与服务器之间会打开一个双向信道,双方都可以在任何时间向对方发送数据,如图14.4所示。

RSocket支持各种语言和平台,包括Java、JavaScript、Kotlin、.NET、Go和C++。最近的版本Spring为RSocket提供了良好的支持,使我们能够很容易地按照使用Spring的习惯创建服务器和客户端。
接下来,我们深入理解如何使用这4种通信模型创建RSocket服务器和客户端。