实现节点下线功能,优化控制通道和数据通道的连接处理
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user