Proxy do Play2 Framework transmitindo conteúdo para o cliente mantém a conexão aberta após a execução do streaming
O código abaixo faz streaming de volta para o cliente, no que eu entendo é uma maneira mais idiomática do que usar o IO Streams do Java. No entanto, ele tem um problema: a conexão é mantida aberta após o fluxo ser concluído.
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")
}
Isso é destinado ao streaming de arquivos grandes (> 1 mb) da API interna para o solicitante.
A questão é, por que manter a conexão aberta? Existe algo que espera do servidor upstream? Eu testei o servidor upstream usando o curl, e a conexão foi fechada - ela simplesmente não fecha quando passada por esse proxy.