我正在使用 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)
如何使上面的代码编译并运行?
根据文档,您在调用中缺少一个模块名称空间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)