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]] [[package]]
name = "aether-hub" name = "aether-hub"
version = "0.1.5" version = "0.1.6"
dependencies = [ dependencies = [
"axum", "axum",
"clap", "clap",

View File

@@ -77,16 +77,30 @@ pub async fn handle_worker_connection(ws: WebSocket, hub: Arc<HubRouter>, cfg: C
.await; .await;
}); });
tokio::select! { let reader_finished = tokio::select! {
_ = &mut reader => {} res = &mut reader => {
_ = &mut liveness => {} 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(); conn.request_close();
reader.abort(); if !reader_finished {
liveness.abort(); reader.abort();
let _ = reader.await; let _ = reader.await;
let _ = liveness.await; }
if reader_finished {
liveness.abort();
let _ = liveness.await;
}
hub.unregister_worker(conn_id); hub.unregister_worker(conn_id);
tokio::time::sleep(Duration::from_millis(100)).await; tokio::time::sleep(Duration::from_millis(100)).await;