Hyper 找不到服务器模块

TPP*_*PPZ 8 http rust hyper

我正在使用 Hyper 编写一个“hello world”HTTP 服务器,但是在尝试导入它们时我无法找到Server和模块。rt

调用时cargo run,我看到以下错误消息:

26 |     let server = hyper::Server::bind(&addr).serve(router);
   |                         ^^^^^^ could not find `Server` in `hyper`
Run Code Online (Sandbox Code Playgroud)

我肯定遗漏了一些关于 Rust 和 Hyper 的明显内容。我想做的是编写尽可能干/简单的东西,只使用 HTTP 层和一些基本路由。我想包含尽可能少的第三方依赖项,例如避免 Tokio,我认为它涉及异步行为,但我不确定上下文,因为我是 Rust 新手。

看起来我必须使用 futures,所以我包含了这个依赖项,也许 futures 只适用于async保留字(我不确定它是来自 Tokio 还是 Rust 本身)。

令我困惑的是,在 Hyper 示例中,我确实看到了像 之类的导入use hyper::{Body, Request, Response, Server};,因此该Server东西一定存在于某处。

这些是以下依赖项Cargo.toml

hyper = "0.14.12"
serde_json = "1.0.67"
futures = "0.3.17"
Run Code Online (Sandbox Code Playgroud)

这是以下代码main.rs

26 |     let server = hyper::Server::bind(&addr).serve(router);
   |                         ^^^^^^ could not find `Server` in `hyper`
Run Code Online (Sandbox Code Playgroud)

如何使上面的代码编译并运行?

Net*_*ave 5

根据文档,您在调用中缺少一个模块名称空间hyper::server::Server

let server = hyper::server::Server::bind(&addr).serve(router)
Run Code Online (Sandbox Code Playgroud)

为了使用server你需要激活货物中的功能标志:

hyper = { version = "0.14.12", features = ["server"] }
Run Code Online (Sandbox Code Playgroud)

  • 必须添加所有 3 个:`hyper = { version = "0.14.12", features = ["http1", "server", "tcp"] }`。然而现在存在一个问题,即“router”没有实现 Trait 或其他东西,但我还没有看到任何文档或示例提供比我上面写的更复杂的路由器:“trait `for<'a> Service< &'a AddrStream>` 未针对 `[closure@src/main.rs:7:18: 23:6]` 实现” (2认同)