2012-06-16 61 views
2

我试图写的一段代码异步合并,以便:的Clojure中网络响应

  • 访问2 web服务的一些请求
  • 的响应将是对象的序列,由ID识别的每个对象,响应按升序排序由ID
  • 的响应将是大的和流(或gzip的分块)
  • 结果将是基于ID的从两个输入数据的合并

我试图实现的是,一旦响应的相应部分可用,输出应该被写出。我也不想等待整个回应的到位,因为这会耗尽内存。我想尽快开始流式输出,并尽可能少地保留内存。

什么是一个好的开始?

我看过aleph和lamina,也是async.http.client。看起来这些工具可以帮助我,但我很难搞清楚如何获得一段代码,这些代码会对来自这两个Web服务的响应做出相同的反应。

回答

2

你可以做这样的事情(使用aleph - 在引擎盖下使用叶片通道抽象)。

现在订阅回调会尽快到达的任一通道的接收每个JSON对象,你可以比有一个本地​​这与键为值在地图上要结合来自2个通道,并且值是将存储相同密钥的值的向量。因此,这会是这样的:

  • 在接收回调的项目,检查本地​​地图已具有关键
  • 如果密钥已,商店或与2项做一些其他的处理(一个已经在地图中,另一个已经收到),并从地图上删除密钥。
  • 如果密钥不存在,则创建密钥和值为[item],即现在正在接收的一个项目的向量。
+0

感谢您对椎板通道的加入给予了启发。我会实现这一点,看看如何。 –