2012-06-16 23 views
2

我試圖寫的一段代碼異步合併,以便:的Clojure中網絡響應

  • 訪問2 web服務的一些請求
  • 的響應將是對象的序列,由ID識別的每個對象,響應按升序排序由ID
  • 的響應將是大的和流(或gzip的分塊)
  • 結果將是基於ID的從兩個輸入數據的合併

我試圖實現的是,一旦響應的相應部分可用,輸出應該被寫出。我也不想等待整個迴應的到位,因爲這會耗盡內存。我想盡快開始流式輸出,並儘可能少地保留內存。

什麼是一個好的開始?

我看過aleph和lamina,也是async.http.client。看起來這些工具可以幫助我,但我很難搞清楚如何獲得一段代碼,這些代碼會對來自這兩個Web服務的響應做出相同的反應。

回答

2

你可以做這樣的事情(使用aleph - 在引擎蓋下使用葉片通道抽象)。

現在訂閱回調會盡快到達的任一通道的接收每個JSON對象,你可以比有一個本地​​這與鍵爲值在地圖上要結合來自2個通道,並且值是將存儲相同密鑰的值的向量。因此,這會是這樣的:

  • 在接收回調的項目,檢查本地​​地圖已具有關鍵
  • 如果密鑰已,商店或與2項做一些其他的處理(一個已經在地圖中,另一個已經收到),並從地圖上刪除密鑰。
  • 如果密鑰不存在,則創建密鑰和值爲[item],即現在正在接收的一個項目的向量。
+0

感謝您對椎板通道的加入給予了啓發。我會實現這一點,看看如何。 –