Событие на стороне сервера HTML5: EventSource против упакованного WebSocket - PullRequest
3 голосов
/ 14 декабря 2011

Является ли API-интерфейс HTML5 Server Sent Events (SSE) ограниченным, основанным на событиях API поверх HTML5 WebSockets?

Мне кажется, что EventSource - это просто WebSocket, что:

  1. Не могу .send() данные
  2. Использует формат text/event-stream
  3. Запускает динамически именуемые (определяемые сервером) события вместо onmessage

Идея о том, что веб-сервер передает события на клиентские устройства, весьма интригует. Есть ли у этого API какие-либо преимущества?

Я полагаю, что асинхронная модель событий будет работать прекрасно, когда вы будете работать с Node, но не увидите много вариантов использования для этого в моем мире ASP.NET.

Ответы [ 2 ]

7 голосов
/ 14 декабря 2011

Server Sent Events полезна в приложениях, которым требуется только server push , тогда как веб-сокеты хороши для приложений, которым требуется быстрая связь в обоих направлениях.

Примеры, когда отправленные сервером события являются хорошим решением:

  • Изменение стоимости акций
  • Ленты новостей

События, отправленные сервером, делают еще несколько вещей, которые не встроены в веб-сокеты, такие как автоматическое переподключение и идентификаторы событий .

Начиная с сегодняшнего дня, события Server Sent также имеют более широкую поддержку веб-браузера с поддержкой в ​​Safari (поддерживаются только старые черновики веб-сокетов) и Opera (веб-сокеты отключены по умолчанию и используется более старый черновик).

Подробнее о событиях, отправленных сервером, в Потоковые обновления с событиями, отправленными сервером .

5 голосов
/ 10 января 2012

В дополнение к тому, что сказал Джонас, протоколы совершенно другие.

  • The WebSocket Protocol (RFC 6455) запускается как HTTP-соединение, затем использует рукопожатие для обновления соединения до нового протокола. Это двоичный протокол, который использует кадрирование, типы сообщений и т. Д.

  • Server-Sent Events - это длительный HTTP-запрос, который остается открытым. Сервер отправляет сообщения в простом текстовом формате (кодировка UTF-8), ограниченном \n\n. Сообщение имеет поля event (тип события), data, id и может содержать комментарии.

Одним из основных отличий является модель безопасности. В WebSockets по умолчанию разрешено подключение любому пользователю. Отказ от соединения должен быть сделан на стороне сервера, на основе заголовка Origin.

SSE, с другой стороны, ближе к HTTP и использует политику того же происхождения. По умолчанию вы можете отправлять запросы только на один и тот же хост и порт. В будущем можно будет использовать CORS для выполнения междоменных запросов SSE. На сегодняшний день браузеры еще не реализовали это.

Два протокола используют разные подходы, поскольку они решают разные проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...