我使用Erlang和Mochiweb编写了一个web服务。web服务返回大量结果,并花费一些时间来完成计算。我希望程序一找到结果就返回结果,而不是在找到所有结果时才返回结果。
编辑:我发现我可以使用块请求来流结果,但似乎我找不到关闭连接的方法。关于如何关闭mochiweb请求有什么想法吗?
要在HTTP 1.1中传输未知大小的数据,您可以使用HTTP分块传输编码。在这种编码中,每个数据块都以十六进制的形式加上其大小。最后一个块是零长度块,块大小编码为0,但不包含任何数据。
如果客户端不支持HTTP 1.1,服务器可以发送二进制数据块,并在流结束时关闭连接。
在MochiWeb中,它的工作原理如下:
- HTTP响应应该以
Response = Request:
response ({Code, ResponseHeaders, chunked})函数开始。(顺便说一下,看看代码注释); - 通过
Response:
write_chunk(Data)功能将chunk发送到客户端。为了指示客户端,应该发送长度为零的流块的结束:Response:write_chunk(<<>>)
。 - 当当前请求处理结束时,MochiWeb决定连接是关闭还是可以被HTTP持久连接重用。