<分区>
我正在探索将 nickel-rs 用于网络应用程序,因此我目前正在编写一些基本程序来复制我已经能够使用 python 和 flask 实现的行为。对于这个特定案例,我想跟踪针对特定路由的请求数量。在 python 中,使用全局变量很容易,我假设全局解释器锁提供了一些保证,即变量一次只能被一个事物访问(并不是说对于这个特定场景来说这是一个大问题)。然而,在 Rust 中,为了做同样的事情,每当我访问我的计数器时我都必须使用 unsafe
,这似乎表明可能有一种安全的方式来实现应用程序状态?
我试过使用 Nickel::with_data(config)
,其中 config 是一个包含单个 u64 的结构,通过使用 Request 实现的 server_data() 方法,我可以获得我的计数器的值,但我设法通过借用 server_data() 结构结果作为可变结果写入结构的任何更改,但新值在方法调用之间不会持续存在。
我试图适应正在发生的事情here .
到目前为止,我设法开始工作的唯一方法是这篇文章中包含的代码。
#[macro_use]
extern crate nickel;
use nickel::{Nickel, HttpRouter};
static mut REQUEST_COUNT: u64 = 0;
fn main() {
let mut nickel_app = Nickel::new();
nickel_app.get("/", middleware! {
unsafe {
println!("REQUEST_COUNT: {} -> {}", REQUEST_COUNT, REQUEST_COUNT + 1u64);
REQUEST_COUNT += 1u64;
}
"index"
});
nickel_app.get("/req", middleware! {
unsafe {
format!("REQUEST_COUNT is {}", REQUEST_COUNT)
}
});
match nickel_app.listen("127.0.0.1:8080") {
Ok(_) => {}
Err(_) => {
panic!("Couldn't bind to 127.0.0.1:8080")
}
}
}