Actix-Web:运行 每 10 秒服务一次
Actix-Web: Run service every 10 seconds
我目前正在使用 Rust 和 Actix-Web 实现一个服务器。我现在的任务是每 10 秒从这台服务器向另一台服务器发送一个请求(ping 请求)。 ping 请求本身是在 async
函数中实现的:
async fn ping(client: web::Data<Client>, state: Data<AppState>) -> Result<HttpResponse, Error> {}
这是我的简单服务器主要功能:
#[actix_rt::main]
async fn main() -> std::io::Result<()> {
::std::env::set_var("RUST_LOG", "debug");
env_logger::init();
let args = config::CliOptions::from_args();
let config =
config::Config::new(args.config_file.as_path()).expect("Failed to config");
let address = config.address.clone();
let app_state = AppState::new(config).unwrap();
println!("Started http server: http://{}", address);
HttpServer::new(move || {
App::new()
.data(app_state.clone())
.app_data(app_state.clone())
.data(Client::default())
.default_service(web::resource("/").route(web::get().to(index)))
})
.bind(address)?
.run()
.await
}
我尝试使用 tokio
,但这太复杂了,因为所有不同的异步函数及其生命周期。
那么在 actix-web 中是否有任何简单的方法可以在服务器启动后每 10 秒执行一次此 ping 功能(可能作为一项服务)?
谢谢!
参见actix_rt::spawn
and actix_rt::time::interval
。
这是一个例子:
spawn(async move {
let mut interval = time::interval(Duration::from_secs(10));
loop {
interval.tick().await;
// do something
}
});
#[get("/run_c")]
async fn run_c() -> impl Responder {
//tokio::time::delay_until(Duration::from_secs(5)).await;
//time::interval(period)
let mut interval = time::interval(Duration::from_millis(10));
loop {
interval.tick().await;
print!("hello");
HttpResponse::Ok().body("Hello world!");
}
}
这有效,但只有它不会向调用者返回 http 响应
我目前正在使用 Rust 和 Actix-Web 实现一个服务器。我现在的任务是每 10 秒从这台服务器向另一台服务器发送一个请求(ping 请求)。 ping 请求本身是在 async
函数中实现的:
async fn ping(client: web::Data<Client>, state: Data<AppState>) -> Result<HttpResponse, Error> {}
这是我的简单服务器主要功能:
#[actix_rt::main]
async fn main() -> std::io::Result<()> {
::std::env::set_var("RUST_LOG", "debug");
env_logger::init();
let args = config::CliOptions::from_args();
let config =
config::Config::new(args.config_file.as_path()).expect("Failed to config");
let address = config.address.clone();
let app_state = AppState::new(config).unwrap();
println!("Started http server: http://{}", address);
HttpServer::new(move || {
App::new()
.data(app_state.clone())
.app_data(app_state.clone())
.data(Client::default())
.default_service(web::resource("/").route(web::get().to(index)))
})
.bind(address)?
.run()
.await
}
我尝试使用 tokio
,但这太复杂了,因为所有不同的异步函数及其生命周期。
那么在 actix-web 中是否有任何简单的方法可以在服务器启动后每 10 秒执行一次此 ping 功能(可能作为一项服务)?
谢谢!
参见actix_rt::spawn
and actix_rt::time::interval
。
这是一个例子:
spawn(async move {
let mut interval = time::interval(Duration::from_secs(10));
loop {
interval.tick().await;
// do something
}
});
#[get("/run_c")]
async fn run_c() -> impl Responder {
//tokio::time::delay_until(Duration::from_secs(5)).await;
//time::interval(period)
let mut interval = time::interval(Duration::from_millis(10));
loop {
interval.tick().await;
print!("hello");
HttpResponse::Ok().body("Hello world!");
}
}
这有效,但只有它不会向调用者返回 http 响应