【问题标题】:Streaming connection / long polling with HTTP Kit?使用 HTTP Kit 进行流式连接/长轮询?
【发布时间】:2016-10-24 09:58:24
【问题描述】:

我正在尝试使用一个永不关闭的 HTTP 流连接(它是 Gnip Compliance 流)。

我想与HTTP Kit 合作,但我无法让它工作。如果我通过 :stream 参数:

@(http/get "http://example.com/stream-connection" {:as :stream})

在请求关闭之前不会返回响应(并且永远不会完成)。

有没有办法做到这一点?

我用clj-http 尝试过同样的事情,但运气不好。

【问题讨论】:

  • 你查看过http-kit网站上的例子吗:http-kit.org/server.html#async?
  • 没有。我认为服务器与客户端无关?
  • 哦,我的错 - 我误读了你的问题 - 抱歉。
  • 不用担心。 Java (/Clojure) 服务器比客户端有更多的细节。

标签: http clojure http-kit


【解决方案1】:

您是否尝试过通过回调使其异步:

(http/get "http://example.com/stream-connection" {:as :stream}
              (fn [{:keys [status headers body error opts]}]
                ;; body is a java.io.InputStream
                (with-open [inp body]
                  (let [rdr (clojure.java.io/reader inp)]
                    (doseq [i (cheshire.core/parsed-seq rdr)]
                      (println i))))))

据我了解,连接一直挂起,直到它读取整个流(永无止境),所以你不应该在这里使用 deref。 相反,您应该使用异步回调和迭代流阅读器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-24
    • 2017-06-11
    • 2011-11-05
    • 2017-05-15
    • 2018-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多