【发布时间】:2018-01-30 01:47:19
【问题描述】:
我想用 Rust、Hyper 和 websocket-rs 编写一个网络服务器。网络服务器必须能够在同一端口处理 http 请求和 websocket 请求。我使用了官方示例(async-server.rs:https://github.com/cyderize/rust-websocket/blob/master/examples/async-server.rs)并尝试对其进行修改。我的想法是改变错误处理。如果客户端的请求是一个简单的 http 请求,则不要返回错误,而是生成一个未来来处理该请求。
基于另一个 SO 问题 (How do I handle an error when using rust-websocket so that only that connection fails and not the entire program?),我更改了示例中的错误处理。
这是旧代码:
.map_err(|InvalidConnection {error, ..}| {
println!("Error:{:?}",error);
return error;
})
这是我的新代码:
.map(Some).or_else(|_| -> Result<_, ()> {
// SPAWN THE FUTURE
Ok(None)
})
这就是我卡住的地方。示例代码调用函数spawn_future,它需要一个参数(upgrade.reject()),因为我无权访问upgrade 结构,所以我的代码中没有该参数。我尝试了其他一些事情(即调用handle.spawn_fn),但编译器从不喜欢我所做的。 (我可以粘贴一些编译器错误,但我认为它们不会提高我帖子的质量。)
这是我的问题:编写可以在同一端口上处理 http 请求和 websocket 请求的异步服务器的推荐方法是什么?如果我的方法是正确的:你能帮我填写SPAWN THE FUTURE 行吗?
附加上下文(如果你还没有注意到的话):我是一个完全的 Rust 初学者。
【问题讨论】: