0

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

编辑:

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

4

1 回答 1

2

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

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

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

  1. HTTP 响应应该以 response Response = Request:({Code, ResponseHeaders, chunked})函数开始。(顺便看一下代码注释);
  2. Response:然后可以使用write_chunk(Data)函数将块发送到客户端。为了指示客户端,应发送零长度的流块的结尾:Response:write_chunk(<<>>).
  3. 当前请求的处理结束时,MochiWeb 决定应该关闭连接还是可以由HTTP 持久连接重用。
于 2011-04-14T18:43:59.910 回答