Rack で transfer-encoding: chunked なレスポンスを返す

each を実装したオブジェクトを body として返してやるといい感じになる。 -> ならないかも。末尾参照(2019-10-28 17:25追記)

Streaming::Stream のように each を実装したオブジェクトを call の戻り値に詰めている。

実際のレスポンスをみると Transfer-Encoding: chunked であることがわかる。
またサーバ側のログからも wrapper end のあとに Stream#each が実行されていることがわかる。なので rack middleware 層を突き抜けた先で each が評価されている。
--raw をつけて実際 chunk ごとにきてることも確認している。chunk が来た瞬間に curl が stdout に書いてくれるわけではないようで、すべて終わってから書かれるのが気になるところではあるがきっとだいじょうぶだろう。

gist9adfaa2234729ad51913b3169064dbc0

2019-10-28 17:25追記

すべて終わってから書かれるのが気になるところではあるがきっとだいじょうぶだろう。

chrome タブで開いてTTFBを見ると 3sec かかっているのでぜんぜん大丈夫じゃなかったっぽい

f:id:hkdnet:20191028172652p:plain