【发布时间】:2020-06-07 12:57:15
【问题描述】:
我一直在尝试跨异步助手共享(只读)数据结构。我想要完成的是创建一个 Hyper 服务器,在其中我预先生成了一些可供所有请求处理程序使用的数据。
以下是 Hyper 入门指南中的示例,扩展了我正在尝试做的事情:
#[tokio::main]
async fn main() {
let address = SocketAddr::from(([127, 0, 0, 1], 3000));
let pages = generate_static_pages();
let make_service = make_service_fn(|_conn| async move {
Ok::<_, Infallible>(service_fn(|req: Request<Body>| async move {
serve(pages, req)
}))
});
let server = Server::bind(&address).serve(make_service);
if let Err(error) = server.await {
eprintln!("server error: {}", error);
}
}
在我的例子中,generate_static_pages() 返回一个带有预生成页面的HashMap<&'static str, Bytes>。不幸的是,这个哈希映射不能在编译时生成,因为这会使事情变得容易得多。现在,我很挣扎,因为pages 不能被闭包借用:“不能移出pages,FnMut 闭包中的捕获变量”
我试图传递一个引用,但这没有奏效,因为 Rust 无法推断变量的生存时间足够长以供闭包使用。然后我尝试使用.clone(),但这不起作用,因为它会在移动后在变量上被调用,但它不能。最后,我尝试用Arc 包裹,但这并没有解决它,基本上是因为同样的原因。
你会建议我做什么?谢谢!
【问题讨论】:
标签: rust rust-tokio hyper