9 流
Ratpack 支持以多种方式流式传输数据。本章概述了在 Ratpack 中使用数据流的基本原理以及流式传输数据的不同方法。
1.9 响应式流 API
通常,Ratpack 中的流式传输基于正在兴起的 响应式流 API 标准。
来自响应式流网站
响应式流是一个倡议,旨在为 JVM 上的异步流处理提供一个标准,该标准具有非阻塞背压。
Ratpack 使用响应式流 API(而不是专有 API),以允许用户选择他们选择的响应式工具包。像 RxJava 和 Reactor 这样的响应式工具包将在不久的将来支持桥接到响应式流 API。但是,如果您的需求不高,则不需要使用专门的响应式库。Ratpack 提供一些有用的工具,通过其 Streams
类处理流。
1.1.9 背压
响应式流 API 的一个关键原则就是支持通过背压进行流量控制。这允许流订阅者(在 HTTP 服务器应用程序的情况下,通常是 HTTP 客户端)与发布者通信他们可以处理多少数据。在极端情况下,如果没有背压,缓慢消费的客户端可能会耗尽服务器上的资源,因为数据生产者生产数据的速度快于数据的消费速度,可能会填满内存缓冲区。背压允许数据生产者将其生产速率与客户端可以处理的速率相匹配。
有关背压重要性的更多信息,请参见 响应式流 项目的文档。
流式传输响应始终通过 Response.sendStream()
方法进行。有关流式传输数据时背压的更精确语义,请参见此方法的文档。
2.9 分块传输编码
Ratpack 通过 ResponseChunks
可渲染类型支持 分块传输编码,用于任意数据流。
3.9 服务器发送事件
Ratpack 通过 ServerSentEvents
可渲染类型支持 服务器发送事件,用于将数据流式传输到主要基于 Javascript 的客户端。
4.9 WebSocket
Ratpack 通过 WebSockets.websocketBroadcast()
方法支持通过 WebSocket 流式传输数据。
Ratpack 还通过 WebSockets
类中的其他 WebSocket 打开方法支持双向 WebSocket 通信。