增加关闭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