このマニュアルは進行中の作業であり、現時点では未完成です。
マニュアルの改善にご協力いただければ幸いです。 README をご覧ください。

9 ストリーム

Ratpack はさまざまな方法でストリーミングデータをサポートしています。この章では、Ratpack でのデータストリーム操作の基礎と、データをストリーミングするためのさまざまな方法について概要を説明します。

1.9 Reactive Streams API

一般的に、Ratpack でのストリーミングは、新しく登場した Reactive Streams API 標準に基づいています。

Reactive Streams サイトから

Reactive Streams は、JVM 上で非ブロッキングのバックプレッシャーを使用して、非同期ストリーム処理の標準を提供するイニシアチブです。

Ratpack は、独自の API ではなく Reactive Streams API を使用して、ユーザーが任意のリアクティブツールキットを選択できるようにしています。 RxJavaReactor などのリアクティブツールキットは、近い将来 Reactive Streams API とのブリッジに対応する予定です。ただし、必要条件が控えめな場合は、特別なリアクティブライブラリを使用する必要はありません。Ratpack は Streams クラスを通してストリームを処理するための便利なユーティリティを提供しています。

1.1.9 バックプレッシャー

Reactive Streams API の重要な原則は、バックプレッシャーによるフロー制御のサポートです。これにより、通常は HTTP クライアントである HTTP サーバーアプリケーション内のストリームサブスクライバーは、処理可能なデータ量をパブリッシャーに伝えることができます。極端な場合、バックプレッシャーがなければ、データプロデューサーがデータを使用するよりも速くデータを生成すると、低速で処理するクライアントがサーバーのリソースを枯渇させ、メモリーバッファーがいっぱいになる可能性があります。バックプレッシャーにより、データプロデューサーは生成速度をクライアントの処理速度と一致させることができます。

バックプレッシャーの重要性についての詳細な情報については、Reactive Streams プロジェクトのドキュメントを参照してください。

レスポンスのストリーミングは、常に Response.sendStream() メソッドを使用して行われます。このメソッドのドキュメントを参照して、バックプレッシャーがデータストリーミング時に何を意味するのかについての正確なセマンティクスを確認してください。

2.9 チャンク転送エンコーディング

Ratpack は ResponseChunks レンダラブルタイプを使用して、任意のデータストリームに対する チャンク転送エンコーディング をサポートしています。

3.9 サーバー送信イベント

Ratpack は ServerSentEvents レンダラブルタイプを使用して、主に Javascript ベースのクライアントにデータをストリーミングするための サーバー送信イベント をサポートしています。

4.9 Websocket

Ratpackは WebSocket を介したストリーミングデータを WebSockets.websocketBroadcast() メソッドによってサポートします。

Ratpackは WebSockets クラスの他のWebsocketオープニングメソッドを介した双方向のWebsocket通信もサポートします。