gpt4 book ai didi

rust - 在 Rust 中使用 warp 框架同时在多个端口(http、https)上提供服务

转载 作者:行者123 更新时间:2023-12-03 11:30:02 25 4
gpt4 key购买 nike

我想使用 warp 为多个连接提供服务这样我就可以将每个 http 请求重定向到 https。这就是我现在要做的。

#[tokio::main]
async fn main() {

let http_routes = warp::path("http").map(|| {
println!("This is http server");
warp::redirect(Uri::from_static("https://127.0.0.1:2443"))
});

let https_routes = warp::any().map(|| {
println!("This is https server");
"Hello, World! You are connected through tls connection."
});

let _http_warp = warp::serve(http_routes)
.run(([127, 0, 0, 1], 2080)).await;

let _https_warp = warp::serve(https_routes)
.tls()
.cert_path("sec/dmp.cert")
.key_path("sec/dmp.key")
.run(([127, 0, 0, 1], 2443)).await;
}
这不会按预期工作。它只监听端口 2080 而不是 2443
我也试过 future ::加入
#[tokio::main]
async fn main() {

----snip----

let (_http_addr, http_warp) = warp::serve(http_routes)
.bind_ephemeral(([127, 0, 0, 1], 2080));

let (_https_addr, https_warp) = warp::serve(https_routes)
.tls()
.cert_path("sec/dmp.cert")
.key_path("sec/dmp.key")
.bind_ephemeral(([127, 0, 0, 1], 2443));

future::join(http_warp, https_warp).await?
}
这给出了错误
error[E0277]: the `?` operator can only be applied to values that implement `std::ops::Try`
--> src/main.rs:27:5
|
27 | future::join(http_wrap, https_wrap).await?
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the `?` operator cannot be applied to type `((), ())`
|
= help: the trait `std::ops::Try` is not implemented for `((), ())`
= note: required by `std::ops::Try::into_result`

最佳答案

让它运行完全是一件简单的事情,那就是删除 ?后缀来自 await 语句的末尾并放置一个分号。

future::join(http_wrap, https_wrap).await? // FROM THIS
future::join(http_wrap, https_wrap).await; // TO THIS

就是这样。现在两个 future 同时运行,因此它在两个端口上监听。

关于rust - 在 Rust 中使用 warp 框架同时在多个端口(http、https)上提供服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61423911/

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