package handlers import ( "log" "sync" "github.com/gofiber/websocket/v2" ) var clients = make(map[*websocket.Conn]bool) var clientsMutex sync.Mutex func WsHandler(c *websocket.Conn) { clientsMutex.Lock() clients[c] = true clientsMutex.Unlock() defer func() { clientsMutex.Lock() delete(clients, c) clientsMutex.Unlock() c.Close() }() for { // Just keep alive, ignore incoming messages _, _, err := c.ReadMessage() if err != nil { log.Println("ws error:", err) break } } } func BroadcastProgress(message string) { clientsMutex.Lock() defer clientsMutex.Unlock() for client := range clients { err := client.WriteMessage(websocket.TextMessage, []byte(message)) if err != nil { log.Println("ws broadcast error:", err) client.Close() delete(clients, client) } } }