在actix_web中,App::register_data方法创建的是每个线程一个实例的数据。
下面是一个包含代码示例的解决方法:
use actix_web::{web, App, HttpServer};
struct MyData {
value: i32,
}
fn index(data: web::Data) -> String {
format!("Value: {}", data.value)
}
#[actix_rt::main]
async fn main() -> std::io::Result<()> {
// 创建一个App实例
let app = App::new()
// 注册数据,每个线程都会有一个实例
.register_data(MyData { value: 42 })
// 定义路由处理程序
.route("/", web::get().to(index));
// 启动HttpServer并在8080端口上监听请求
HttpServer::new(move || app.clone())
.bind("127.0.0.1:8080")?
.run()
.await
}
在上面的代码中,我们定义了一个名为MyData的结构体,它包含一个整数值。在main函数中,我们创建了一个App实例,并使用register_data方法注册了一个MyData实例。
当我们启动HttpServer并在8080端口上监听请求时,每个线程都会有一个App实例和一个MyData实例。在index函数中,我们可以通过使用web::Data提取MyData实例并访问其值。
这样,每个线程都有自己的MyData实例,而不会共享相同的实例。