Событие на стороне сервера HTML5: EventSource и обернутый WebSocket

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

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

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

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

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


person user979672    schedule 14.12.2011    source источник


Ответы (2)


События, отправленные сервером, полезны в приложениях, которым требуется только поддержка сервера, а веб-сокеты хороши для приложений, которым требуется быстрая связь в обоих направлениях.

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

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

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

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

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

person Jonas    schedule 14.12.2011

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

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

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

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

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

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

person igorw    schedule 10.01.2012