0 我有一个带有Axum 的网络服务器,当我接到一个呼叫时,比如说我的端点start
,我想启动一个可以通过调用第二个端点来停止的进程stop
。
如果我第二次调用端点start
,我希望能够不启动线程,因为它已经启动了(也许,但现在还不行,我想更新其中一个值,但我们假设我不做任何事情,因为这个过程已经启动了)。
我的主要功能如下:
css
#[tokio::main]
async fn main() {
tracing_subscriber::fmt().with_writer(io::stderr).init();
let process_starter = Arc::new(ProcessStarter::new());
let app_state = AppState {
process_starter,
};
let app = Router::new()
.route("/start", post(start))
.route("/stop", post(stop))
.with_state(app_state.clone());
info!("Starting web server");
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000")
.await
.unwrap();
axum::serve(listener, app).await.unwrap();
}
但我不知道如何实现ProcessStarter
,因为我尝试过的一些事情,比如产生新线程和保持它的状态不起作用。