gpt4 book ai didi

rust - 如何根据 Rocket 服务器的状态响应不同的值?

转载 作者:行者123 更新时间:2023-11-29 08:31:07 26 4
gpt4 key购买 nike

<分区>

我想根据服务器的状态用不同的值响应“相同的请求”。

我的期望是这些响应会循环发生:

  • 有人发送一个 GET/ 请求,它以“Hello, World!”作为响应。
  • 然后他们发送一个 GET/ 请求,它以“Hello, Rust!”作为响应。
  • 然后他们发送一个 GET/ 请求,它以“Hello, Rocket!”作为响应。
  • 然后他们发送一个 GET/ 请求,它以“Hello, State!”作为响应。

我不想使用在 main 中(在 Rocket 路由处理程序中)初始化的变量。我想使用一个变量,其值可以在 main 中更改(在 Rocket 路由处理程序中)。

这段代码编译没有错误,但实际行为是它总是响应“Hello, World!”。

#![feature(proc_macro_hygiene)]
#![feature(decl_macro)]

#[macro_use]
extern crate rocket;

#[macro_use]
extern crate lazy_static;

use std::sync::{Arc, Mutex};
use rocket::State;

use std::thread;
use std::time::Duration;

lazy_static! {
static ref RESPONSE: Arc<Mutex<String>>
= Arc::new(Mutex::new(String::from("Hello, World!")));
}

#[get("/")]
fn get_response(state: State<Arc<Mutex<String>>>) -> String {
let response = state.lock().unwrap();
let ret: String = String::from(response.as_str());
ret
}

fn main() {
let managed_response: Arc<Mutex<String>> = RESPONSE.clone();
rocket::ignite()
.manage(managed_response)
.mount("/", routes![get_response])
.launch();

let mut server_state = 0;
loop {
// Pseudo transition of the state of server
thread::sleep(Duration::from_secs(5));
let mut response = RESPONSE.lock().unwrap();
match server_state {
0 => *response = String::from("Hello, Rust!"), // state 0
1 => *response = String::from("Hello, Rocket!"), // state 1
2 => *response = String::from("Hello, State!"), // state 2
_ => panic!(),
}
server_state += 1;
if server_state >= 3 {
server_state = 0;
}
}
}

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com