rust - 如何用 Rust 实现应用程序状态?

标签 rust nickel

<分区>

我正在探索将 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")
        }
    }
}

最佳答案

看起来像this是我正在寻找的一种访问某种应用程序状态的安全方式。

关于rust - 如何用 Rust 实现应用程序状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57009292/

相关文章:

rust - rust-racer 的 cargo 路径设置

rest - 无法在 `Fn` 闭包中将捕获的外部变量借用为可变的

error-handling - 为什么?运算符(operator)报告错误 "the trait bound NoneError: Error is not satisfied"?

function - 从 select crate 返回 document::find 的结果时如何分配生命周期?

rust - 实现 `IntoIterator` ,将数组更改为结构

rust - 如何在镍路由中使用多个变量?

database - 检查某个数据库条目是否已存在于 DIesel/Rust 中

rust - 如何将值发送到 Nickel 中间件函数

json - 如何使用 Nickel 模板返回 JSON 文件?