pub struct BodyWriter { /* private fields */ }Expand description
StreamingResponse::channel の producer 側ハンドル。
tokio::spawn したタスクへ move して使う想定の Send + 'static 型。
クローンして複数タスクから送信することもできる(mpsc::Sender の
clone セマンティクスをそのまま継承。最後の 1 つが finish するか、
全クローンが finish を呼ばずに drop されるとチャネルが閉じる)。
Implementations§
Source§impl BodyWriter
impl BodyWriter
Sourcepub async fn send(&self, data: Vec<u8>) -> Result<(), StreamClosed>
pub async fn send(&self, data: Vec<u8>) -> Result<(), StreamClosed>
1 チャンク分のデータを送る。
チャネルが満杯(StreamingResponse::channel の capacity に到達)の
場合は受信側(コアの書き出しループ)がソケットへ書き出して空きが
できるまで .await で停止する(バックプレッシャ、モジュール冒頭 doc)。
data が空の場合も呼び出し自体は成功するが、送出時に
fandhe_backend_http::chunked::encode_chunk が無出力にする契約
のため実際のワイヤ出力は生じない(誤終端防止、同関数の doc を参照)。
§Errors
受信側が既に終了している場合は StreamClosed を返す。
Sourcepub async fn finish(self) -> Result<(), StreamClosed>
pub async fn finish(self) -> Result<(), StreamClosed>
ストリームを正常終端する。
受信側は fandhe_backend_http::chunked::encode_terminator を送出し、
応答を完全なものとして扱う(keep-alive 継続も許される)。self を
消費することで「finish 後に send を呼ぶ」という無意味な呼び出し
順序を型レベルで防ぐ。
finish を呼ばずに self を drop した場合は打ち切りとして扱われ、
受信側は終端チャンクを送らず接続をクローズする(モジュール冒頭
doc の「応答完全性」節を参照)。
§Errors
受信側が既に終了している場合は StreamClosed を返す。