// Gap优化器
type GapOptimizer struct {
gapData map[string]int
mu sync.RWMutex
}
func NewGapOptimizer() *GapOptimizer {
return &GapOptimizer{
gapData: make(map[string]int),
}
}
func (g *GapOptimizer) OptimizeGap(deviceID string, mtu int, rtt int64) int {
g.mu.Lock()
defer g.mu.Unlock()
// 根据MTU和RTT计算最优Gap值
// MTU越大,允许的Gap越大
// RTT越小,允许的Gap越大
baseGap := mtu / 100
if baseGap < 0 {
baseGap = 0
}
if baseGap > 20 {
baseGap = 20
}
// 根据RTT调整
rttFactor := 1.0
if rtt > 20000 {
rttFactor = 0.5
} else if rtt > 10000 {
rttFactor = 0.8
}
optimalGap := int(float64(baseGap) * rttFactor)
if optimalGap < 0 {
optimalGap = 0
}
g.gapData[deviceID] = optimalGap
return optimalGap
}