Skip to content

Commit 548e2da

Browse files
authored
feat: update quic-go dependency to v0.57.1 and add generateID function for unique stream ID generation
1 parent 6ecdc95 commit 548e2da

File tree

3 files changed

+22
-10
lines changed

3 files changed

+22
-10
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ module github.com/NodePassProject/quic
22

33
go 1.25.0
44

5-
require github.com/quic-go/quic-go v0.56.0
5+
require github.com/quic-go/quic-go v0.57.1
66

77
require (
88
golang.org/x/crypto v0.45.0 // indirect

go.sum

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,12 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
22
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
33
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
44
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
5-
github.com/quic-go/quic-go v0.56.0 h1:q/TW+OLismmXAehgFLczhCDTYB3bFmua4D9lsNBWxvY=
6-
github.com/quic-go/quic-go v0.56.0/go.mod h1:9gx5KsFQtw2oZ6GZTyh+7YEvOxWCL9WZAepnHxgAo6c=
7-
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
8-
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
5+
github.com/quic-go/quic-go v0.57.1 h1:25KAAR9QR8KZrCZRThWMKVAwGoiHIrNbT72ULHTuI10=
6+
github.com/quic-go/quic-go v0.57.1/go.mod h1:ly4QBAjHA2VhdnxhojRsCUOeJwKYg+taDlos92xb1+s=
7+
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
8+
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
99
go.uber.org/mock v0.5.2 h1:LbtPTcP8A5k9WPXj54PPPbjcI4Y6lhyOZXn+VS7wNko=
1010
go.uber.org/mock v0.5.2/go.mod h1:wLlUxC2vVTPTaE3UD51E0BGOAElKrILxhVSDYQLld5o=
11-
golang.org/x/crypto v0.44.0 h1:A97SsFvM3AIwEEmTBiaxPPTYpDC47w720rdiiUvgoAU=
12-
golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc=
1311
golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q=
1412
golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4=
1513
golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=

quic.go

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ const (
4040
type Shard struct {
4141
streams sync.Map // 存储流的映射表
4242
idChan chan string // 可用流ID通道
43+
first atomic.Bool // 首次标志
4344
quicConn atomic.Pointer[quic.Conn] // QUIC连接
4445
quicListener atomic.Pointer[quic.Listener] // QUIC监听器
4546
index int // 分片索引
@@ -374,11 +375,10 @@ func (s *Shard) handleStream(stream *quic.Stream, globalChan chan string, maxCap
374375
}
375376

376377
// 生成流ID
377-
rawID := make([]byte, 4)
378-
if _, err := rand.Read(rawID); err != nil {
378+
rawID, id, err := s.generateID()
379+
if err != nil {
379380
return
380381
}
381-
id := hex.EncodeToString(rawID)
382382

383383
// 防止重复流ID
384384
if _, exist := s.streams.Load(id); exist {
@@ -731,3 +731,17 @@ func (p *Pool) adjustCapacity(created int) {
731731
p.capacity.Add(1)
732732
}
733733
}
734+
735+
// generateID 生成唯一流ID
736+
func (s *Shard) generateID() ([]byte, string, error) {
737+
if s.first.CompareAndSwap(false, true) {
738+
return []byte{0, 0, 0, 0}, "00000000", nil
739+
}
740+
741+
rawID := make([]byte, 4)
742+
if _, err := rand.Read(rawID); err != nil {
743+
return nil, "", err
744+
}
745+
id := hex.EncodeToString(rawID)
746+
return rawID, id, nil
747+
}

0 commit comments

Comments
 (0)