我使用Erlang和Mochiweb编写了一个Web服务。 Web服务返回大量结果,并花费一些时间来完成计算。 我想在程序找到结果后立即返回结果,而不是在找到所有结果时返回结果。
编辑:
我发现我可以使用chunked请求来传输结果,但似乎我找不到关闭连接的方法。关于如何关闭mochiweb请求的任何想法?
答案 0 :(得分:2)
要使用HTTP 1.1流式传输未知大小的数据,您可以使用HTPP chunked transfer encoding。在此编码中,每个数据块的大小以十六进制为前缀。最后一个块是一个零长度的块,块大小编码为0,但没有任何数据。
如果客户端不支持HTTP 1.1,则服务器可以将数据作为二进制块发送,并在流的末尾关闭连接。
在MochiWeb中,它的工作原理如下:
Response = Request:
respond({Code, ResponseHeaders, chunked})函数启动HTTP响应。 (顺便说一句,看看代码注释); Response:
write_chunk(Data)功能将块发送给客户端。要指示客户端应该发送零长度的流块的末尾:Response:write_chunk(<<>>)
。