> Что такое WebSocket и как он работает (Go)

Уровень: junior · Роль: backend · Категория: Технические вопросы

Компании: Wildberries

Стек: Go

> Пример ответа

WebSocket - это протокол полнодуплексной связи поверх одного TCP-соединения, предназначенный для реального времени. В отличие от HTTP, где клиент инициирует запрос, а сервер отвечает, WebSocket позволяет обеим сторонам отправлять данные в любой момент без дополнительных накладных расходов.

Как это работает:

  1. Рукакопожатие (handshake): Клиент отправляет HTTP-запрос с заголовком Upgrade: websocket и Connection: Upgrade. Сервер отвечает статусом 101 Switching Protocols, после чего соединение переводится из HTTP в WebSocket.

  2. Фреймы данных: После установки соединения данные передаются в виде фреймов (текстовых или бинарных). Каждый фрейм имеет заголовок (длиной от 2 до 14 байт) и полезную нагрузку. Протокол поддерживает фрагментацию сообщений и контрольные фреймы (ping/pong для проверки соединения, close для закрытия).

  3. Закрытие: Любая сторона может инициировать закрытие, отправив фрейм close с кодом причины.

В Go для работы с WebSocket часто используют библиотеку gorilla/websocket. Пример эхо-сервера:

GO
package main
import (
"log"
"net/http"
"github.com/gorilla/websocket"
)
var upgrader = websocket.Upgrader{
CheckOrigin: func(r *http.Request) bool { return true },
}
func echoHandler(w http.ResponseWriter, r *http.Request) {
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
log.Print("Upgrade failed:", err)
return
}
defer conn.Close()
for {
messageType, message, err := conn.ReadMessage()
if err != nil {
break
}
if err := conn.WriteMessage(messageType, message); err != nil {
break
}
}
}
func main() {
http.HandleFunc("/echo", echoHandler)
log.Fatal(http.ListenAndServe(":8080", nil))
}

Ключевые особенности: низкая задержка, постоянное соединение, подходит для чатов, уведомлений, игр и стриминга. Важно учитывать, что WebSocket не поддерживается в HTTP/2 (но есть альтернативы вроде Server-Sent Events для однонаправленной связи).

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью