рабочий вариант, но скороть 10 МБит
This commit is contained in:
@@ -8,6 +8,7 @@ import (
|
||||
|
||||
const (
|
||||
DefaultInitialStreamCredit = 32
|
||||
DefaultMaxStreamCredit = 4096
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -29,6 +30,7 @@ const (
|
||||
|
||||
type SessionConfig struct {
|
||||
InitialStreamCredit int
|
||||
MaxStreamCredit int
|
||||
ClassQueueCapacity map[TrafficClass]int
|
||||
}
|
||||
|
||||
@@ -188,6 +190,7 @@ func (s *Session) Ack(streamID uint64, sequence uint64) error {
|
||||
delta := sequence - st.metrics.Acked
|
||||
st.metrics.Acked = sequence
|
||||
s.metrics.FramesAcked += delta
|
||||
st.credit = minInt(st.credit+int(delta), s.cfg.MaxStreamCredit)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -205,7 +208,7 @@ func (s *Session) AddCredit(streamID uint64, frames int) error {
|
||||
if st.state != StreamStateOpen {
|
||||
return ErrStreamClosed
|
||||
}
|
||||
st.credit += frames
|
||||
st.credit = minInt(st.credit+frames, s.cfg.MaxStreamCredit)
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -311,6 +314,12 @@ func normalizeSessionConfig(cfg SessionConfig) SessionConfig {
|
||||
if cfg.InitialStreamCredit <= 0 {
|
||||
cfg.InitialStreamCredit = DefaultInitialStreamCredit
|
||||
}
|
||||
if cfg.MaxStreamCredit <= 0 {
|
||||
cfg.MaxStreamCredit = maxInt(DefaultMaxStreamCredit, cfg.InitialStreamCredit)
|
||||
}
|
||||
if cfg.InitialStreamCredit > cfg.MaxStreamCredit {
|
||||
cfg.InitialStreamCredit = cfg.MaxStreamCredit
|
||||
}
|
||||
if cfg.ClassQueueCapacity == nil {
|
||||
cfg.ClassQueueCapacity = map[TrafficClass]int{}
|
||||
}
|
||||
@@ -331,14 +340,28 @@ func priorityOrder() []TrafficClass {
|
||||
func defaultClassQueueCapacity(trafficClass TrafficClass) int {
|
||||
switch trafficClass {
|
||||
case TrafficClassControl, TrafficClassDNS, TrafficClassInteractive:
|
||||
return 128
|
||||
return 1024
|
||||
case TrafficClassReliable:
|
||||
return 64
|
||||
return 512
|
||||
case TrafficClassBulk:
|
||||
return 16
|
||||
return 256
|
||||
case TrafficClassDroppable:
|
||||
return 8
|
||||
return 128
|
||||
default:
|
||||
return 32
|
||||
return 256
|
||||
}
|
||||
}
|
||||
|
||||
func minInt(a, b int) int {
|
||||
if a < b {
|
||||
return a
|
||||
}
|
||||
return b
|
||||
}
|
||||
|
||||
func maxInt(a, b int) int {
|
||||
if a > b {
|
||||
return a
|
||||
}
|
||||
return b
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user