From 2e77801adcf767a3a25ee08394d82b9211649f4e Mon Sep 17 00:00:00 2001 From: lbl <1791778603@qq.com> Date: Thu, 20 Aug 2026 23:08:16 +0800 Subject: [PATCH] =?UTF-8?q?fix(server):=20=E5=8D=95=E5=8F=B0=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E5=99=A8=E6=B3=A8=E5=86=8C=E5=A4=B1=E8=B4=A5=E4=B8=8D?= =?UTF-8?q?=E5=86=8D=E6=8B=96=E5=9E=AE=E6=95=B4=E4=B8=AA=20P2P=20=E6=A0=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题:data_handle_task_connected 的重连循环中,注册被拒绝 (ResponseMessage::Error)、返回非注册消息、或虚拟网络发生变化时 break 后会调用 task_group.stop(),把包括其他健康服务器连接在内的 整个任务组全部停掉。 修复: - 注册被拒绝/返回错误消息:与连接失败一致,退避 5 秒后重试, 仅影响本服务器的重连。 - 虚拟网络发生变化:只结束本服务器的数据任务,不再 stop 整个任务组。 注:重连循环依赖真实服务器连接,未做端到端测试;全部既有单测通过。 --- .../tunnel_core/server/connection_manager.rs | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/vnt-core/src/tunnel_core/server/connection_manager.rs b/vnt-core/src/tunnel_core/server/connection_manager.rs index 2ad4176..5c80a00 100644 --- a/vnt-core/src/tunnel_core/server/connection_manager.rs +++ b/vnt-core/src/tunnel_core/server/connection_manager.rs @@ -163,7 +163,6 @@ impl ServerTurnManager { initial_response: NetworkAddr, ) { let data_handler = ServerTurnInboundHandler::new(self.server_id, initial_response, config); - let task_group_ = task_group.clone(); let Some(mut receiver) = self.receiver.take() else { unreachable!() }; @@ -188,7 +187,12 @@ impl ServerTurnManager { || reg.prefix_len != initial_response.prefix_len || reg.gateway != initial_response.gateway { - log::error!("虚拟网络发生变化"); + // 该服务器分配的虚拟网络与当前不一致,无法重连, + // 只结束本服务器的任务,不影响其他服务器 + log::error!( + "服务器{}虚拟网络发生变化,放弃重连", + self.config.server_addr + ); break; } // 保存服务器版本 @@ -197,12 +201,16 @@ impl ServerTurnManager { } } ResponseMessage::Error(e) => { - log::error!("注册失败 {e:?}"); - break; + // 单台服务器注册失败只影响本服务器的重连, + // 退避后重试,不能拖垮整个任务组 + log::error!("注册失败 {e:?},5秒后重试"); + tokio::time::sleep(std::time::Duration::from_secs(5)).await; + continue; } _ => { - log::error!("错误的注册消息"); - break; + log::error!("错误的注册消息,5秒后重试"); + tokio::time::sleep(std::time::Duration::from_secs(5)).await; + continue; } } } @@ -217,7 +225,6 @@ impl ServerTurnManager { } self.disconnect(); data_handler.handle_disconnected(); - task_group_.stop(); }); }