fix(hub): 修复 worker 连接清理逻辑,按完成顺序有序取消对端任务

This commit is contained in:
fawney19
2026-03-12 15:17:00 +08:00
parent 280c604327
commit ebd53ad679
2 changed files with 23 additions and 9 deletions

2
aether-hub/Cargo.lock generated
View File

@@ -10,7 +10,7 @@ checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
[[package]]
name = "aether-hub"
version = "0.1.5"
version = "0.1.6"
dependencies = [
"axum",
"clap",

View File

@@ -77,16 +77,30 @@ pub async fn handle_worker_connection(ws: WebSocket, hub: Arc<HubRouter>, cfg: C
.await;
});
tokio::select! {
_ = &mut reader => {}
_ = &mut liveness => {}
}
let reader_finished = tokio::select! {
res = &mut reader => {
if let Err(err) = res {
warn!(worker_id = conn_id, error = %err, "worker reader task failed");
}
true
}
res = &mut liveness => {
if let Err(err) = res {
warn!(worker_id = conn_id, error = %err, "worker liveness task failed");
}
false
}
};
conn.request_close();
reader.abort();
liveness.abort();
let _ = reader.await;
let _ = liveness.await;
if !reader_finished {
reader.abort();
let _ = reader.await;
}
if reader_finished {
liveness.abort();
let _ = liveness.await;
}
hub.unregister_worker(conn_id);
tokio::time::sleep(Duration::from_millis(100)).await;