以下のコードは、クライアントにストリーミングを戻します。私が収集するのは、JavaのIOストリームを使用するよりも慣用的な方法です。ただし、問題があります。ストリームが実行された後、接続が開いたままになります。
def getImage() = Action { request =>
val imageUrl = "http://hereandthere.com/someimageurl.png"
Ok.stream({ content: Iteratee[Array[Byte], Unit] =>
WS.url(imageUrl).withHeaders("Accept"->"image/png").get { response => content }
return
}).withHeaders("Content-Type"->"image/png")
}
これは、内部APIからリクエスターに大きな(> 1 mb)ファイルをストリーミングすることを目的としています。
問題は、なぜ接続を開いたままにするのかということです。アップストリームサーバーに期待するものはありますか?curlを使用してアップストリームサーバーをテストしましたが、接続が閉じられます。このプロキシを通過したときに接続が閉じられません。