Работал ли с SSE

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

Ответ

Да, работал с Server-Sent Events (SSE) в Go. Это простой механизм для отправки событий от сервера клиенту через HTTP. В отличие от WebSockets, SSE работает только в одну сторону (сервер → клиент) и использует обычные HTTP-соединения.

Пример реализации сервера на Go:

func sseHandler(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "text/event-stream")
    w.Header().Set("Cache-Control", "no-cache")
    w.Header().Set("Connection", "keep-alive")

    flusher, _ := w.(http.Flusher)

    for {
        select {
        case <-r.Context().Done():
            return
        default:
            fmt.Fprintf(w, "data: %snn", time.Now().Format(time.RFC3339))
            flusher.Flush()
            time.Sleep(1 * time.Second)
        }
    }
}

Клиентская часть (JavaScript):

const eventSource = new EventSource('/sse');
eventSource.onmessage = (e) => console.log(e.data);

SSE хорошо подходит для уведомлений, логов в реальном времени, обновлений статусов. Главные преимущества - простота реализации и совместимость с HTTP.