diff --git a/vnt/src/channel/punch.rs b/vnt/src/channel/punch.rs index 20de4b3..4270f9a 100644 --- a/vnt/src/channel/punch.rs +++ b/vnt/src/channel/punch.rs @@ -323,9 +323,9 @@ impl Punch { let max_k1 = 60; //全局最多发送max_k2个包 let mut max_k2: usize = rand::thread_rng().gen_range(600..800); - if count > 1 { + if count > 2 { //递减探测规模 - max_k2 = max_k2.mul(4).div(3).div(count).max(max_k1 as usize); + max_k2 = max_k2.mul(2).div(count).max(max_k1 as usize); } let port = nat_info.public_ports.get(0).map(|e| *e).unwrap_or(0); if nat_info.public_port_range < max_k1 * 3 { diff --git a/vnt/src/handle/maintain/punch.rs b/vnt/src/handle/maintain/punch.rs index 298d7a5..ee5490d 100644 --- a/vnt/src/handle/maintain/punch.rs +++ b/vnt/src/handle/maintain/punch.rs @@ -1,5 +1,6 @@ use std::collections::HashMap; use std::net::Ipv4Addr; +use std::ops::{Div, Mul}; use std::sync::mpsc::{sync_channel, Receiver, SyncSender}; use std::sync::Arc; use std::thread; @@ -249,9 +250,11 @@ fn punch0( .lock() .get(&info.virtual_ip) .cloned() - .unwrap_or(0); + .unwrap_or(0) + .mul(2) + .div(3); let p2p_num = context.route_table.p2p_num(&info.virtual_ip); - let mut max_punch_interval = 70; + let mut max_punch_interval = 50; if p2p_num > 0 { if punch_count == 0 { continue;