Yoh*_*hei 5 http rust web reqwest actix-web
我正在使用 actix-web 构建一个 Web 服务器,其中一种方法使用 reqwest 向外部 API 发出 HTTP 请求:
#[get("/foo")]
async fn foo() -> impl Responder {
let resp = reqwest::get("https://externalapi.com/bar").await?; # GET request inside server
...
}
Run Code Online (Sandbox Code Playgroud)
为了提高性能,我想重用 reqwest 的客户端,因为根据doc ,它拥有一个连接池。但是,我无法使用Arc
共享客户端,因为文档还有以下声明:
您不必将 Client 包装在 Rc 或 Arc 中即可重用它,因为它已经在内部使用了 Arc。
如何在函数调用之间共享客户端?或者,我应该使用不同的库在 Web 服务器内创建 HTTP 请求吗?
Öme*_*den 12
实际上文档中的建议就是解决方案:
您不必将 Client 包装在 Rc 或 Arc 中即可重用它,因为它已经在内部使用了 Arc。
简单来说就是clone
客户。
请检查来源Client
的定义:
#[derive(Clone)]
pub struct Client {
inner: Arc<ClientRef>,
}
Run Code Online (Sandbox Code Playgroud)
Client
您可以作为参考持有者思考
内部 type( ) 已按照文档所述ClientRef
包装并已实现,因为除了 之外没有其他字段,与您自己包装它相比,克隆客户端不会导致任何运行时开销。Arc
Client
Clone
inner: Arc<_>
Arc
另外Client
实现Send
这意味着客户端的克隆可以跨线程发送,因为这里不需要显式的可变Client
操作Mutex
。(我说显式是因为可能存在内部可变性)
归档时间: |
|
查看次数: |
1534 次 |
最近记录: |