优化启动速度

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_worker = vnt_status_manager.worker("channel_worker");
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 {
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 device_list = device_list.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());
// 空闲检查
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 {
// 打洞处理
punch_handler::start(other_worker.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());
tokio::spawn(punch_handler::start_punch(other_worker, nat_test,
punch_handler::start(vnt_status_manager.worker("cone_receiver"), cone_receiver, punch.clone(), 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(vnt_status_manager.worker("punch_handler"), nat_test,
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);
Ok(Vnt {
config: self.config,
+20 -6
View File
@@ -96,17 +96,31 @@ impl NatTest {
) -> NatTest {
let server = stun_server[0].clone();
stun_server.resize(3, server);
let info = NatTest::re_test_(
&stun_server,
public_ip,
let nat_info = NatInfo::new(
vec![public_ip],
public_port,
0,
local_ipv4_addr,
ipv6_addr,
).await;
NatTest {
NatType::Cone,
);
let info = Arc::new(Mutex::new(nat_info));
let nat_test = NatTest {
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 {
self.info.lock().clone()