How to Implement Heartbeat/Ping-Pong for WebSockets in Go

Web
Implement WebSocket heartbeats in Go by using SetPingHandler and SetPongHandler to track liveness and sending periodic PingMessage frames.

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
    }
}