使用 HTTP Kit 进行流式连接/长轮询?

Joe*_*Joe 5 http clojure http-kit

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

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

@(http/get "http://example.com/stream-connection" {:as :stream})
Run Code Online (Sandbox Code Playgroud)

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

有没有办法做到这一点?

我已经用clj-http尝试过同样的事情,但没有运气。

Gri*_*ead 0

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

(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))))))
Run Code Online (Sandbox Code Playgroud)

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