优化启动速度

This commit is contained in:
lubeilin
2023-09-03 11:28:40 +08:00
parent 1a4e375dbf
commit acb5a8a325
2 changed files with 34 additions and 18 deletions
+14 -12
View File
@@ -280,34 +280,36 @@ impl VntUtil {
let channel = Channel::new(context.clone(), channel_recv_handler); let channel = Channel::new(context.clone(), channel_recv_handler);
let channel_worker = vnt_status_manager.worker("channel_worker"); let channel_worker = vnt_status_manager.worker("channel_worker");
let relay = config.relay; let relay = config.relay;
if let Some(tcp_proxy) = tcp_proxy {
tokio::spawn(tcp_proxy.start());
}
if let Some(udp_proxy) = udp_proxy {
tokio::spawn(udp_proxy.start());
}
tokio::spawn(async move { tokio::spawn(async move {
channel.start(channel_worker, tcp, 14, 65, relay, config.parallel).await channel.start(channel_worker, tcp, 14, 65, relay, config.parallel).await
}); });
} }
{ {
let other_worker = vnt_status_manager.worker("punch_handler");
let nat_test = nat_test.clone(); let nat_test = nat_test.clone();
let device_list = device_list.clone(); let device_list = device_list.clone();
let current_device = current_device.clone(); let current_device = current_device.clone();
// 定时心跳 // 定时心跳
heartbeat_handler::start_heartbeat(other_worker.worker("heartbeat"), channel_sender.clone(), device_list.clone(), heartbeat_handler::start_heartbeat(vnt_status_manager.worker("heartbeat"), channel_sender.clone(), device_list.clone(),
current_device.clone(), config.server_address_str, client_cipher.clone(), self.server_cipher.clone()); current_device.clone(), config.server_address_str, client_cipher.clone(), self.server_cipher.clone());
// 空闲检查 // 空闲检查
heartbeat_handler::start_idle(other_worker.worker("idle"), idle, channel_sender.clone()); heartbeat_handler::start_idle(vnt_status_manager.worker("idle"), idle, channel_sender.clone());
if !config.relay { if !config.relay {
// 打洞处理 // 打洞处理
punch_handler::start(other_worker.worker("cone_receiver"), cone_receiver, punch.clone(), current_device.clone(), client_cipher.clone()); punch_handler::start(vnt_status_manager.worker("cone_receiver"), cone_receiver, punch.clone(), current_device.clone(), client_cipher.clone());
punch_handler::start(other_worker.worker("symmetric_receiver"), symmetric_receiver, punch, current_device.clone(), client_cipher.clone()); punch_handler::start(vnt_status_manager.worker("symmetric_receiver"), symmetric_receiver, punch, current_device.clone(), client_cipher.clone());
tokio::spawn(punch_handler::start_punch(other_worker, nat_test, tokio::spawn(punch_handler::start_punch(vnt_status_manager.worker("punch_handler"), nat_test,
device_list, channel_sender, current_device, client_cipher.clone())); device_list, channel_sender, current_device, client_cipher.clone()));
} }
} }
{
//代理
if let Some(tcp_proxy) = tcp_proxy {
tokio::spawn(tcp_proxy.start());
}
if let Some(udp_proxy) = udp_proxy {
tokio::spawn(udp_proxy.start());
}
}
context.switch(nat_test.nat_info().nat_type); context.switch(nat_test.nat_info().nat_type);
Ok(Vnt { Ok(Vnt {
config: self.config, config: self.config,
+20 -6
View File
@@ -96,17 +96,31 @@ impl NatTest {
) -> NatTest { ) -> NatTest {
let server = stun_server[0].clone(); let server = stun_server[0].clone();
stun_server.resize(3, server); stun_server.resize(3, server);
let info = NatTest::re_test_( let nat_info = NatInfo::new(
&stun_server, vec![public_ip],
public_ip,
public_port, public_port,
0,
local_ipv4_addr, local_ipv4_addr,
ipv6_addr, ipv6_addr,
).await; NatType::Cone,
NatTest { );
let info = Arc::new(Mutex::new(nat_info));
let nat_test = NatTest {
stun_server, stun_server,
info: Arc::new(Mutex::new(info)), info,
};
{
let nat_test = nat_test.clone();
tokio::spawn(async move {
let _ = nat_test.re_test(
public_ip,
public_port,
local_ipv4_addr,
ipv6_addr,
).await;
});
} }
nat_test
} }
pub fn nat_info(&self) -> NatInfo { pub fn nat_info(&self) -> NatInfo {
self.info.lock().clone() self.info.lock().clone()