package ws import ( "log" "gateway/internal/service" ) type Hub struct { // 注册的客户端 Clients map[*Client]bool // 从客户端接收的消息 Broadcast chan *Message // 注册请求 Register chan *Client // 注销请求 Unregister chan *Client // 用户服务 UserService *service.UserService } func NewHub(userService *service.UserService) *Hub { return &Hub{ Broadcast: make(chan *Message), Register: make(chan *Client), Unregister: make(chan *Client), Clients: make(map[*Client]bool), UserService: userService, } } func (h *Hub) Run() { for { select { case client := <-h.Register: h.Clients[client] = true log.Printf("Client connected. Total clients: %d", len(h.Clients)) case client := <-h.Unregister: if _, ok := h.Clients[client]; ok { delete(h.Clients, client) close(client.Send) log.Printf("Client disconnected. Total clients: %d", len(h.Clients)) } case message := <-h.Broadcast: for client := range h.Clients { select { case client.Send <- message: default: close(client.Send) delete(h.Clients, client) } } } } }