快速要求发送rust

问题描述 投票:0回答:1
库来发送我在Rocket上写的旧服务中的请求。 服务工作包含两个部分:

take take Request主体与
serde_json

图书馆
    使用
  1. N
    library
    将此机构置于另一个
  2. reqwest
  3. 服务
    但是这里有“瓶颈”问题。当我的服务曾经收到比每秒500个请求更多的请求时,调度程序试图在它们之间切换并引起大量的CPU使用(几乎800%in
    docker stats
就像一个工人池问题..?

如果有人对如何解决这个问题有任何想法,我会非常感谢。
UPD:代码示例

pub async fn handler(data: Json<Value>) { let data = data.take().to_string(); for url in urls { match Client::new().post(url) .header("Content-Type", "application/json") .body(data) .send().await{ ... } } }

我们以前曾在生产中遇到过这个问题。我们正在使用

reqwest::get()
,但是问题是相同的:您每个请求都创建一个客户端。连接重复使用/合并发生在客户端级别,因此,如果您为每个请求创建客户端,则无法重复使用连接。这导致:
rust reqwest
1个回答
0
投票

所有高架都足以在非常忙碌时将我们的一项服务带到膝盖上。

解决方案是创建一个single

并分享它。 请注意,在内部,客户拥有池的所有权。这意味着您可以廉价地客户,所有克隆都将共享相同的连接池。
    实施此策略的两种直接方法:
  • 在某个地方创建了一个客户,并将其转移到工人身上。
创建全球

reqwest::Client

拥有客户:

.clone()

    

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.