来自Mochiweb的流式传输结果

时间:2011-04-13 06:28:53

标签: erlang mochiweb

我使用Erlang和Mochiweb编写了一个Web服务。 Web服务返回大量结果,并花费一些时间来完成计算。 我想在程序找到结果后立即返回结果,而不是在找到所有结果时返回结果。

编辑:

我发现我可以使用chunked请求来传输结果,但似乎我找不到关闭连接的方法。关于如何关闭mochiweb请求的任何想法?

1 个答案:

答案 0 :(得分:2)

要使用HTTP 1.1流式传输未知大小的数据,您可以使用HTPP chunked transfer encoding。在此编码中,每个数据块的大小以十六进制为前缀。最后一个块是一个零长度的块,块大小编码为0,但没有任何数据。

如果客户端不支持HTTP 1.1,则服务器可以将数据作为二进制块发送,并在流的末尾关闭连接。

MochiWeb中,它的工作原理如下:

  1. 应使用Response = Request: respond({Code, ResponseHeaders, chunked})函数启动HTTP响应。 (顺便说一句,看看代码注释);
  2. 然后可以使用Response: write_chunk(Data)功能将块发送给客户端。要指示客户端应该发送零长度的流块的末尾:Response:write_chunk(<<>>)
  3. 当处理当前请求时,MochiWeb决定是否应关闭连接或HTTP persistent connection可以重复使用。