优化全局数据存储方式,以节点 id 为 key 保存相关数据;修复节点下线监听未关闭问题

This commit is contained in:
2025-05-17 11:02:18 +08:00
parent 84e01d3b50
commit c1664aa898
10 changed files with 77 additions and 51 deletions

View File

@@ -130,19 +130,20 @@ func ctrl(ctx context.Context, id int32, host string) error {
// 异步等待连接命令
slog.Info("等待用户连接")
var cmdCh = make(chan ConnCmd)
var errCh = make(chan error)
go func() {
for {
cmd, err := reader.ReadByte()
if errors.Is(err, net.ErrClosed) {
slog.Debug("控制通道关闭")
return
}
if errors.Is(err, io.EOF) {
slog.Debug("网关关闭了控制通道")
return
}
if err != nil {
slog.Error("读取命令失败", "err", err)
switch {
case errors.Is(err, net.ErrClosed):
err = fmt.Errorf("控制通道关闭: %w", err)
case errors.Is(err, io.EOF):
err = fmt.Errorf("网关关闭了控制通道: %w", err)
default:
err = fmt.Errorf("读取命令失败: %w", err)
}
errCh <- err
return
}
@@ -168,6 +169,9 @@ func ctrl(ctx context.Context, id int32, host string) error {
select {
case <-ctx.Done():
loop = false
case err = <-errCh:
slog.Error("读取控制命令失败", "err", err)
loop = false
case cmd := <-cmdCh:
slog.Debug("建立数据通道", "tag", cmd.Tag, "addr", cmd.Addr)
go func() {