Какие знаешь технологии для транслирования событий в реальном времени

«Какие знаешь технологии для транслирования событий в реальном времени» — вопрос из категории Брокеры сообщений, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Go популярны следующие технологии для real-time событий:

  1. WebSockets - нативный пакет golang.org/x/net/websocket или библиотеки:
    • gorilla/websocket (наиболее популярная)
    • nhooyr.io/websocket (легковесная)
// Пример с gorilla/websocket
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
    log.Println("Upgrade error:", err)
    return
}
defer conn.Close()

for {
    _, msg, err := conn.ReadMessage()
    if err != nil {
        break
    }
    conn.WriteMessage(websocket.TextMessage, msg)
}
  1. SSE (Server-Sent Events) - через стандартный net/http:
w.Header().Set("Content-Type", "text/event-stream")
for {
    fmt.Fprintf(w, "data: %snn", time.Now().String())
    w.(http.Flusher).Flush()
    time.Sleep(1 * time.Second)
}
  1. gRPC streaming - двунаправленные потоки через google.golang.org/grpc

  2. NATS, Redis Pub/Sub - для распределенных систем

  3. MQTT (через eclipse/paho.mqtt.golang) - для IoT сценариев

Выбор зависит от требований: WebSockets для браузеров, gRPC для сервисов, MQTT для устройств.