В чем разница между Long Polling, WebSocket и Server-Sent Events

«В чем разница между Long Polling, WebSocket и Server-Sent Events» — вопрос из категории Асинхронность, который задают на 10% собеседований Frontend Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Long Polling — клиент отправляет запрос, сервер держит соединение открытым, пока не появится новое событие. После ответа клиент сразу отправляет новый запрос.

WebSocket — двустороннее постоянное соединение. После рукопожатия (HTTP-запрос) клиент и сервер могут обмениваться данными в реальном времени без перезагрузки соединения.

SSE (Server-Sent Events) — односторонний поток от сервера к клиенту. Клиент подключается один раз, сервер отправляет события по мере их появления.

Пример SSE:

const eventSource = new EventSource('/updates');
eventSource.onmessage = (e) => {
  console.log('New event:', e.data);
};

Когда использовать:

  • Long Polling: если WebSocket недоступен (устаревшие браузеры)
  • WebSocket: чаты, игры, двусторонняя коммуникация
  • SSE: уведомления, ленты обновлений (Twitter-like)