@@ -40,6 +40,7 @@ const (
4040type 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