增加关闭hub

This commit is contained in:
2025-09-09 19:11:08 +08:00
parent 8d639d3b09
commit 43befdb71c
2 changed files with 18 additions and 0 deletions

View File

@@ -46,6 +46,9 @@ type Hub struct {
// deviceRepo 设备仓库 // deviceRepo 设备仓库
deviceRepo repository.DeviceRepo deviceRepo repository.DeviceRepo
// 关闭消息
close chan struct{}
} }
// Client WebSocket客户端结构 // Client WebSocket客户端结构
@@ -78,6 +81,7 @@ func NewHub(deviceRepo repository.DeviceRepo) *Hub {
deviceClients: make(map[string]*Client), deviceClients: make(map[string]*Client),
logger: logs.NewLogger(), logger: logs.NewLogger(),
deviceRepo: deviceRepo, deviceRepo: deviceRepo,
close: make(chan struct{}),
} }
} }
@@ -101,10 +105,20 @@ func (h *Hub) Run() {
h.unregisterClient(client) h.unregisterClient(client)
case message := <-h.broadcast: case message := <-h.broadcast:
h.broadcastMessage(message) h.broadcastMessage(message)
case <-h.close:
return
} }
} }
} }
func (h *Hub) Close() {
// 关闭时清理所有资源
for client := range h.clients {
h.unregisterClient(client)
}
close(h.close)
}
// registerClient 注册客户端 // registerClient 注册客户端
func (h *Hub) registerClient(client *Client) { func (h *Hub) registerClient(client *Client) {
h.mutex.Lock() h.mutex.Lock()

View File

@@ -75,6 +75,10 @@ func (s *Server) Start() {
go s.hub.Run() go s.hub.Run()
} }
func (s *Server) Stop() {
s.hub.Close()
}
// readPump 从WebSocket连接读取消息 // readPump 从WebSocket连接读取消息
func (c *Client) readPump() { func (c *Client) readPump() {
defer func() { defer func() {