如何从环形 Web 应用程序使用 `clj-http` 连接池?

How to use `clj-http` connection pool from a ring web application?

我正在使用 clojure 网络应用程序作为代理网络服务器。

我的所有请求都进入这个 clojure ring web 应用程序,然后我使用 clj-http 将请求发送到最终目的地。

所以到目前为止,我将此作为一个天真的解决方案,只需为每个请求调用 clj-http/requestThis code is extremely similar to what I am doing

但这还不够好,因为每次发出请求时,都会初始化一个新的 http 客户端。我需要连接池,以便正确地重新使用 http 客户端。

clj-http documentation about persistent connections 声明您像这样重用连接:

(with-connection-pool {:timeout 5 :threads 4 :insecure? false :default-per-route 10}
  (get "http://example.org/1")
  (post "http://example.org/2")
  (get "http://example.org/3")
  ...
  (get "http://example.org/999"))

也许我对 clojure 还不够好,但是有人会如何使用这个连接池包围所有进入 https://github.com/tailrecursion/ring-proxy/blob/master/src/tailrecursion/ring_proxy.clj#L40 的请求?

实现一个将连接管理器添加到请求映射中的中间件。

您需要自己处理连接管理器的生命周期,而不是 with- 形式 - 请参阅 clj-http 文档的最后一部分关于持久连接。