【问题标题】:Streaming Results from Mochiweb来自 Mochiweb 的流式传输结果
【发布时间】:2011-04-15 02:43:59
【问题描述】:

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

编辑:

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

【问题讨论】:

  • 所以不要聊天,问题和答案都留在这里,以供参考。请花更多的时间来制定你的问题。但是,您可以通过省略“我的问题很简单”和先发制人的“谢谢”来节省时间(谢谢更适合作为对好的答案的评论)
  • 好吧,我认为对于真正了解 mochiweb 工作原理的人来说,这个问题很容易,并且我接受了所有对我提交的问题真正正确答案的答案。我不问意见,问题很简单,我需要一个简单的解决方案。
  • 只是想帮助一些经验,哪种形式的问题得到更多的答案,哪种没有。避免这样的混乱是公认的询问方式,请参阅:meta.stackexchange.com/questions/2950/…

标签: erlang mochiweb


【解决方案1】:

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

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

MochiWeb 中,所有操作如下:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 2019-10-26
    • 1970-01-01
    • 1970-01-01
    • 2018-02-23
    相关资源
    最近更新 更多