2011-04-13 76 views
0

我写过一个使用Erlang和Mochiweb的网络服务。 Web服务返回大量结果,并花费一些时间来完成计算。 我想在程序找到它时立即返回结果,而不是在发现它们时返回结果。Mochiweb流式传输结果

编辑:

我发现我可以用分块请求流的结果,但目前看来,我无法找到一个方法来关闭连接。所以关于如何关闭mochiweb请求的想法?

+1

不是聊天,问题和答案在这里留下来供永久参考。请花更多的工作来制定你的问题。但是,您可以通过忽略“我的问题很简单”和先发制人的“谢谢”来节省时间(谢谢作为对正确答案的评论更合适) – 2011-04-14 06:38:28

+0

以及我认为这个问题对于真正了解mochiweb工作原理的人来说很容易,我接受了所有对我提交的问题都非常正确的答案。我不问意见,问题很简单,我需要一个简单的解决方案。 – Alex 2011-04-14 07:25:22

+0

只想帮助一些经验问题的形式得到更多的答案,而不是。避免这样的杂乱是批准的询问方式,请参阅:http://meta.stackexchange.com/questions/2950/should-hi-thanks-and-taglines-and-salutations-be-removed-from-posts/ 3021#3021 – 2011-04-14 15:57:21

回答

2

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

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

MochiWeb它的所有作品如下:

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