2011-12-14 4 views
3

Является ли API-сервер, инициированный сервером HTML5 (SSE) просто ограниченным, основанным на событиях API поверх WebSockets HTML5?Событие на стороне сервера HTML5: EventSource по сравнению с обернутым WebSocket

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

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

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

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

ответ

7

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

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

  • стоимость акций изменяется
  • новости

сервер Sent Events сделать еще некоторые вещи, которые не встроенные в Web Розетки, такие как автоматическое пересоединение и eventIDs.

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

Подробнее о Server Sent Events на Stream Updates with Server-Sent Events.

5

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

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

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

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

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

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