diff --git a/vnt/src/channel/context.rs b/vnt/src/channel/context.rs index d130c9b..200747a 100644 --- a/vnt/src/channel/context.rs +++ b/vnt/src/channel/context.rs @@ -324,7 +324,16 @@ impl RouteTable { } else { let len = v.len(); if len != 0 { - return Ok(v[index % len].0); + let route = &v[index % len].0; + // 跳过默认rt的路由(一般是刚加入的),这有助于提升稳定性 + if route.rt != DEFAULT_RT { + return Ok(*route); + } + for (route, _) in v { + if route.rt != DEFAULT_RT { + return Ok(*route); + } + } } } } diff --git a/vnt/src/channel/mod.rs b/vnt/src/channel/mod.rs index 868bf63..2cb84af 100644 --- a/vnt/src/channel/mod.rs +++ b/vnt/src/channel/mod.rs @@ -68,7 +68,7 @@ pub struct RouteSortKey { pub metric: u8, pub rt: i64, } -const DEFAULT_RT: i64 = 999; +const DEFAULT_RT: i64 = 9999; impl Route { pub fn new(is_tcp: bool, index: usize, addr: SocketAddr, metric: u8, rt: i64) -> Self { Self {