diff --git a/internal/app/service/process.go b/internal/app/service/process.go index 659b5b4..c6d8cc0 100644 --- a/internal/app/service/process.go +++ b/internal/app/service/process.go @@ -49,6 +49,7 @@ type ProcessBase struct { changControlTime time.Time } ws map[string]ConnectInstance + wsLock sync.Mutex Config struct { AutoRestart bool compulsoryRestart bool @@ -178,10 +179,14 @@ func (p *ProcessBase) AddConn(user string, c ConnectInstance) { log.Logger.Error("已存在连接") return } + p.wsLock.Lock() + defer p.wsLock.Unlock() p.ws[user] = c } func (p *ProcessBase) DeleteConn(user string) { + p.wsLock.Lock() + defer p.wsLock.Unlock() delete(p.ws, user) } diff --git a/internal/app/service/process_pty.go b/internal/app/service/process_pty.go index e12d842..a764b6c 100644 --- a/internal/app/service/process_pty.go +++ b/internal/app/service/process_pty.go @@ -103,9 +103,14 @@ func (p *ProcessPty) readInit() { { n, _ := p.pty.Read(buf) p.bufHanle(buf[:n]) + if len(p.ws) == 0 { + continue + } + p.wsLock.Lock() for _, v := range p.ws { v.Write(buf[:n]) } + p.wsLock.Unlock() } } } diff --git a/internal/app/service/process_std.go b/internal/app/service/process_std.go index 28e058b..fd393c3 100644 --- a/internal/app/service/process_std.go +++ b/internal/app/service/process_std.go @@ -109,9 +109,14 @@ func (p *ProcessStd) readInit() { default: { output = p.Read() + if len(p.ws) == 0 { + continue + } + p.wsLock.Lock() for _, v := range p.ws { v.WriteString(output) } + p.wsLock.Unlock() } } }