实现节点下线功能,优化控制通道和数据通道的连接处理

This commit is contained in:
2025-05-16 16:59:33 +08:00
parent 8a6a4833d4
commit 22f3c37478
7 changed files with 136 additions and 120 deletions

View File

@@ -38,17 +38,34 @@ func (s *Service) listenCtrl() error {
defer utils.Close(ls)
// 处理连接
connCh := utils.ChanConnAccept(s.ctx, ls)
// 异步等待连接
var connCh = make(chan net.Conn)
go func() {
for {
conn, err := ls.Accept()
if errors.Is(err, net.ErrClosed) {
slog.Debug("控制通道监听关闭")
return
}
if err != nil {
slog.Error("接受控制通道连接失败", "err", err)
return
}
select {
case connCh <- conn:
case <-s.ctx.Done():
utils.Close(conn)
return
}
}
}()
err = nil
for loop := true; loop; {
for {
select {
case <-s.ctx.Done():
loop = false
case conn, ok := <-connCh:
if !ok {
err = errors.New("获取连接失败")
loop = false
}
return nil
case conn := <-connCh:
s.ctrlConnWg.Add(1)
go func() {
defer s.ctrlConnWg.Done()
@@ -60,8 +77,6 @@ func (s *Service) listenCtrl() error {
}()
}
}
return err
}
func (s *Service) processCtrlConn(ctx context.Context, conn net.Conn) (err error) {