增加关闭hub
This commit is contained in:
		| @@ -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() | ||||||
|   | |||||||
| @@ -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() { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user