WebSocket — протокол полнодуплексной связи поверх TCP. В отличие от HTTP, соединение остаётся открытым и обе стороны могут слать сообщения в любой момент. Идеален для чатов, уведомлений, real-time дашбордов.
// gorilla/websocket
func handler(w http.ResponseWriter, r *http.Request) {
conn, _ := upgrader.Upgrade(w, r, nil)
defer conn.Close()
for {
_, msg, _ := conn.ReadMessage()
conn.WriteMessage(websocket.TextMessage, msg)
}
}
Начинается как обычный HTTP-запрос с заголовком Upgrade: websocket, затем переключается на WebSocket-протокол. В Go популярные библиотеки: gorilla/websocket и nhooyr/websocket. Каждое соединение обычно обслуживается отдельной горутиной — Go отлично подходит для тысяч одновременных WebSocket-коннектов.