Implement WebSocket heartbeats in Go by setting EnableCompression to false and using SetPingHandler and SetPongHandler to track connection liveness.
conn, _, err := upgrader.Upgrade(w, r, nil)
if err != nil {
log.Fatal(err)
}
conn.SetPingHandler(func(appData string) error {
log.Println("Ping received")
return nil
})
conn.SetPongHandler(func(appData string) error {
log.Println("Pong received")
return nil
})
// Send a ping every 30 seconds
for {
time.Sleep(30 * time.Second)
if err := conn.WriteMessage(websocket.PingMessage, []byte{}); err != nil {
log.Println("Ping failed:", err)
break
}
}