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