浏览代码

improve sending performance

v2ray 9 年之前
父节点
当前提交
0acd3b6d62
共有 1 个文件被更改,包括 15 次插入0 次删除
  1. 15 0
      transport/internet/kcp/sending.go

+ 15 - 0
transport/internet/kcp/sending.go

@@ -206,6 +206,9 @@ func (this *SendingQueue) Pop() *alloc.Buffer {
 	if this.start == this.cap {
 		this.start = 0
 	}
+	if this.IsEmpty() {
+		this.start = 0
+	}
 	return seg
 }
 
@@ -301,6 +304,18 @@ func (this *SendingWorker) ProcessSegment(current uint32, seg *AckSegment) {
 		this.remoteNextNumber = seg.ReceivingWindow
 	}
 	this.ProcessReceivingNextWithoutLock(seg.ReceivingNext)
+
+	for !this.queue.IsEmpty() && !this.window.IsFull() {
+		seg := NewDataSegment()
+		seg.Data = this.queue.Pop()
+		seg.Number = this.nextNumber
+		seg.timeout = current
+		seg.ackSkipped = 0
+		seg.transmit = 0
+		this.window.Push(seg)
+		this.nextNumber++
+	}
+
 	var maxack uint32
 	for i := 0; i < int(seg.Count); i++ {
 		timestamp := seg.TimestampList[i]