2011-04-13 119 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重用。