Коротко
Если нужно
- не только отправлять данные с сервера в браузер, но и с браузера в сервер по тому же каналу
- отправлять не только текстовые форматы данных, но и бинарные
- ограничение на количество подключений недопустимо
то нужно использовать вебсокеты
Если нужно
- работать в корпоративных сетых
- можно ограничиться только связью сервер -> клиент
- нужно использовать только стандартный протокол HTTP
то можно использовать SSE
Подробнее
Вебсокеты позволяют как получать в браузере данные с сервера так и отправлять их.
SSE(Server Sent Events) в свою очередь помогают только отправлять данные с сервера в браузер.
Преимущества SSE над вебсокетами:
- Передается по стандартному HTTP протоколу
- Может быть подхвачен JavaScript'ом в браузерах с отсутствующей поддержкой SSE
- Встроенная поддержка переподключения и определения события
- Более простой протокол
- Нет проблем с корпоративными фаерволами
Преимущества вебсокетов над SSE:
- Двунаправленная связь в режиме реального времени
- Нативная поддержка в большинстве браузеров
- Передача бинарных данных
Наиболее подходящим пример использования вебсокетов:
Наиболее подходящие примеры использования SSE:
- Потоковая передача изменений биржевых котировок
- Обновление ленты Твиттера
- Уведомления в браузере
Недостатки SSE:
- Нет поддержки бинарных данных
- Имеется ограничение на максимальное число подключений
Ограничение на количество подключений SSE:
SSE имеет ограничение на максимальное число подключений со стороны клиента.
Данное ограничение может быть особенно неприятным, потому что оно очень маленькое (максимум 6 подключений одновременно), что может вызывать проблемы при открытии множество вкладок одного и того же сервиса.
При этом данная проблема в Chrome и Firefox отмечена как "Won't fix", что говорит о том, что данное обстоятельство в будущем никак не изменится к лучшему.
Ограничение распространяется на связку <Браузер> + <Домен>
, поэтому его можно обойти используя разные доменные имена. Например: 6 подключений к домену test1.ru
и 6 подключений к домену test2.ru
Источник: https://stackoverflow.com/questions/5195452/websockets-vs-server-sent-events-eventsource