Best practices
サービスの生存期間を管理する
リクエスト固有・共有・バックグラウンド処理のリソースについて、所有者と解放する時点を決めます。
1 件のリクエストで使うリソースは、Effront に管理させます。 共有リソースとバックグラウンド処理には、別の所有者を設けてください。
リソースの所有者を決める
| リソースの用途 | 所有者 | 解放する時点 |
|---|---|---|
| 1 件のリクエスト | リクエストの Scope | ストリーミングする本文の完了、失敗、キャンセル時 |
| 接続プールなど、複数のリクエストで共有 | アプリケーションの Layer 外にあるホスト側の所有者 | 利用するすべてのレスポンスが終了した後 |
| レスポンス終了後も続ける処理 | ホストが対応するバックグラウンド処理 | その処理が終了した時点 |
共有の接続プールを使う場合は、借りた接続の返却処理をリクエストの Scope に登録します。 プールの破棄はホスト側の所有者に任せてください。 ホストから提供するサービスについては、外部サービスの所有権の契約を参照してください。
リクエストのリソースをアプリケーションの Layer で取得する
Effront は、EFFRONT.make({ routes, layer }) に渡す Layer をリクエストごとに構築します。
リクエスト固有の取得処理は Layer.effect に置き、Effect.acquireRelease で解放処理を登録します。
サービスの宣言と Layer の登録方法はサービスの設定例を参照してください。
レスポンス本文の終了までリソースを維持する
遅れてレンダーされるコンポーネントは、ハンドラーが Response を返した後も、リクエストのサービスを利用できます。
登録した解放処理は、ストリーミングする本文の終了時にリクエストの Scope に実行させます。
バッファリング済みのレスポンス、本文のないレスポンス、レスポンス生成の失敗では、本文の消費を待たずに Effront が取得済みのリソースを解放します。