gpt4 book ai didi

rust - 如何从 super 服务器使用 Rust shiplift

转载 作者:行者123 更新时间:2023-11-29 08:31:43 24 4
gpt4 key购买 nike

我正在尝试编写一个简单的 Rust 程序,使用 shiplift 读取 Docker 统计信息并使用 rust-prometheus 将它们公开为普罗米修斯指标.

shiplift 统计示例可以自行正确运行,我正尝试将其集成到服务器中作为

fn handle(_req: Request<Body>) -> Response<Body> {
let docker = Docker::new();
let containers = docker.containers();
let id = "my-id";
let stats = containers
.get(&id)
.stats().take(1).wait();
for s in stats {
println!("{:?}", s);
}
// ...
}

// in main
let make_service = || {
service_fn_ok(handle)
};

let server = Server::bind(&addr)
.serve(make_service);

但似乎流永远挂起(我无法产生任何错误消息)。

我还在 shiplift example 中尝试了相同的重构(使用 takewait 而不是 tokio::run) ,但在那种情况下,我收到错误 executor failed to spawn task: tokio::spawn failed (is a tokio runtime running this future?)shiplift 是否需要 tokio

编辑:如果我没理解错的话,我的尝试是行不通的,因为 wait 会阻塞 tokio 执行器,而 stats 永远不会产生结果。

最佳答案

shiplift 的 API 是异步的,这意味着 wait() 和其他函数返回一个 Future,而不是阻塞主线程直到结果准备好了。 Future 在传递给执行程序之前实际上不会执行任何 I/O。您需要将 Future 传递给 tokio::run 作为您链接到的示例。您应该阅读 tokio docs更好地理解如何用 Rust 编写异步代码。

关于rust - 如何从 super 服务器使用 Rust shiplift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56081938/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com