优化全局数据存储方式,以节点 id 为 key 保存相关数据;修复节点下线监听未关闭问题
This commit is contained in:
22
edge/edge.go
22
edge/edge.go
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user