Selaa lähdekoodia

write buffer size

v2ray 9 vuotta sitten
vanhempi
commit
ab710f2714
2 muutettua tiedostoa jossa 17 lisäystä ja 13 poistoa
  1. 2 0
      transport/internet/kcp/config.go
  2. 15 13
      transport/internet/kcp/connection.go

+ 2 - 0
transport/internet/kcp/config.go

@@ -6,6 +6,7 @@ type Config struct {
 	UplinkCapacity   int
 	DownlinkCapacity int
 	Congestion       bool
+	WriteBuffer      int
 }
 
 func (this *Config) Apply() {
@@ -27,6 +28,7 @@ func DefaultConfig() Config {
 		UplinkCapacity:   5,
 		DownlinkCapacity: 20,
 		Congestion:       false,
+		WriteBuffer:      8 * 1024 * 1024,
 	}
 }
 

+ 15 - 13
transport/internet/kcp/connection.go

@@ -53,18 +53,19 @@ func nowMillisec() int64 {
 // Connection is a KCP connection over UDP.
 type Connection struct {
 	sync.RWMutex
-	state         ConnState
-	kcp           *KCP // the core ARQ
-	kcpAccess     sync.Mutex
-	block         Authenticator
-	needUpdate    bool
-	local, remote net.Addr
-	rd            time.Time // read deadline
-	wd            time.Time // write deadline
-	chReadEvent   chan struct{}
-	writer        io.WriteCloser
-	since         int64
-	terminateOnce signal.Once
+	state           ConnState
+	kcp             *KCP // the core ARQ
+	kcpAccess       sync.Mutex
+	block           Authenticator
+	needUpdate      bool
+	local, remote   net.Addr
+	rd              time.Time // read deadline
+	wd              time.Time // write deadline
+	chReadEvent     chan struct{}
+	writer          io.WriteCloser
+	since           int64
+	terminateOnce   signal.Once
+	writeBufferSize int
 }
 
 // NewConnection create a new KCP connection between local and remote.
@@ -82,6 +83,7 @@ func NewConnection(conv uint32, writerCloser io.WriteCloser, local *net.UDPAddr,
 	conn.kcp.WndSize(effectiveConfig.GetSendingWindowSize(), effectiveConfig.GetReceivingWindowSize())
 	conn.kcp.NoDelay(1, effectiveConfig.Tti, 2, effectiveConfig.Congestion)
 	conn.kcp.current = conn.Elapsed()
+	conn.writeBufferSize = effectiveConfig.WriteBuffer / effectiveConfig.Mtu
 
 	go conn.updateTask()
 
@@ -144,7 +146,7 @@ func (this *Connection) Write(b []byte) (int, error) {
 		this.RUnlock()
 
 		this.kcpAccess.Lock()
-		if this.kcp.WaitSnd() < int(this.kcp.snd_wnd) {
+		if this.kcp.WaitSnd() < this.writeBufferSize {
 			nBytes := len(b)
 			this.kcp.Send(b)
 			this.kcp.current = this.Elapsed()