Ответ
Да, работал с 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.