如何从环形 Web 应用程序使用 `clj-http` 连接池?
How to use `clj-http` connection pool from a ring web application?
我正在使用 clojure 网络应用程序作为代理网络服务器。
我的所有请求都进入这个 clojure ring web 应用程序,然后我使用 clj-http 将请求发送到最终目的地。
所以到目前为止,我将此作为一个天真的解决方案,只需为每个请求调用 clj-http/request
。 This 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 文档的最后一部分关于持久连接。
我正在使用 clojure 网络应用程序作为代理网络服务器。
我的所有请求都进入这个 clojure ring web 应用程序,然后我使用 clj-http 将请求发送到最终目的地。
所以到目前为止,我将此作为一个天真的解决方案,只需为每个请求调用 clj-http/request
。 This 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 文档的最后一部分关于持久连接。