Чем WebSocket отличается от long polling и SSE?
DNS, WebSocket и другие протоколы
WebSocket — постоянное полнодуплексное соединение поверх одного TCP, SSE — односторонний поток «сервер → клиент» по обычному HTTP, long polling — эмуляция пушей через висящие запросы.
Long polling
Клиент шлёт запрос, сервер держит его до появления данных, отвечает — клиент тут же спрашивает снова. Просто и работает везде, но каждый «пуш» — полноценный HTTP-запрос с заголовками, плюс задержки на переподключение.
Server-Sent Events
text/event-streamповерх HTTP: сервер пишет события в открытый ответ.- Автоматический реконнект из коробки, дружит с прокси и HTTP/2.
- Ограничения: только направление «сервер → клиент» и только текст.
WebSocket
- Апгрейд с HTTP через заголовок
Upgrade: websocket, дальше двусторонние фреймы — текст и бинарные данные. - Минимальные накладные расходы на сообщение: чаты, игры, совместное редактирование.
- Сложнее в эксплуатации: стейтфул-соединения, балансировка, heartbeat.
Как выбирать
Редкие уведомления — проще SSE; настоящая двусторонняя интерактивность — WebSocket; long polling — запасной вариант для старых окружений.
Коротко для собеседования
Выбор определяется направлением данных: если пишет только сервер, хватит SSE с автореконнектом, если общаются обе стороны — нужен WebSocket. Платой за WebSocket становится эксплуатация: стейтфул-соединения, heartbeat и балансировка.