Является ли Comet устаревшим с отправленными сервером событиями и WebSocket?

Или Отправленные сервером события и WebSocket заменяют методы Comet?

4 ответа

Решение

Comet - это набор технологических принципов / шаблонов связи, которые обычно реализуются с использованием длинного опроса HTTP. Это позволяет серверу отправлять данные в браузер по требованию (т. Е. Отправка сервером). Текущие реализации комет требуют некоторого сложного Javascript на стороне клиента и поддержки со стороны сервера (для длительных запросов).

Server-Sent Events - это стандартный (HTML5) браузерный API-интерфейс, позволяющий осуществлять такого рода принудительную отправку на сервер. Вы можете думать о событиях, отправленных с сервера, как о том, что вы берете то, что было сделано со сложным Javascript, и помещаете его в браузер.

WebSockets позволяет браузеру устанавливать постоянное дуплексное / двунаправленное соединение с сервером с поддержкой WebSocket. Клиенту не требуется периодически отправлять HTTP-запросы на сервер, чтобы поддерживать соединение, как при AJAX/long-poll. Как только соединение установлено, издержки на сообщение очень низки (несколько байтов) по сравнению с издержками при обычном длинном опросе HTTP/HTTP. Вы можете использовать WebSockets для эффективного продвижения сервера, но это только одно приложение.

Существуют также библиотеки, основанные на транспортном уровне AJAX/comet/WebSockets для обеспечения таких вещей, как управление сеансами, каналы, широковещание, pubsub и т. Д. CometD является примером этого. Другой популярный пример - Socket.IO. Оба поддерживают WebSockets, если он доступен для основного транспорта, но также поддерживают стандартный AJAX / long-poll, если WebSockets недоступен.

Я подойду к этому ответу и с терминологии, и с исторической точки зрения.

Как я писал в этом другом ответе, мы можем использовать один из нескольких зонтичных терминов для обозначения набора технологий, доступных для асинхронной отправки событий с веб-сервера веб-клиенту (и наоборот). Термин " Технология Push " использовался в течение пятнадцати лет (за краткую историю Push Technology вы можете увидеть эту старую статью, которую я написал много лет назад - полное раскрытие: я создатель Lightstreamer). Теперь термин " потоковое вещание в Интернете " получает консенсус среди ИТ-аналитиков (см. Gartner, "Крутые поставщики в приложениях и интеграционных платформах, 2012", Массимо Пеццини и Джесс Томпсон, 11 апреля 2012 г.).

Важным аспектом является то, что мы говорим о веб-коммуникации, то есть об использовании веб-протоколов. Существует множество протоколов и технологий обмена сообщениями, которые не основаны на веб-технологиях (например, большинство MOM), и мы не рассматриваем их как часть технологии Push (или веб-потоковой передачи).

При этом вы можете различить две подкатегории технологии Push (или потоковой передачи в сети):

  • На основе HTTP
  • На основе веб-сокетов

И HTTP, и WebSockets являются веб-протоколами.

Если вы взорвете механизмы на основе HTTP, вы можете определить:

  • HTTP Streaming
  • HTTP длинный опрос
  • HTTP-опрос

Традиционно термин " комета " (придуманный Алексом Расселом в 2006 году) относится как к потоковой передаче HTTP, так и к опросу HTTP. Но учтите, что первые реализации HTTP Streaming восходят к 2000 году, задолго до того, как был введен термин Comet (например, Pushlets и Lightstreamer).

Теперь WebSockets упрощает реализацию Web Streaming, особенно для "обратного" канала (сообщения, отправляемые из браузера на сервер). Более подробное объяснение особенностей обратного канала через HTTP см. В заключительной части этой статьи, которую я написал для CometDaily: http://cometdaily.com/2011/07/06/push-technology-comet-and-websockets-10-years-of-history-from-lightstreamers-perspective/

Как указал Фил, комета по-прежнему необходима и, вероятно, понадобится еще на несколько лет, поскольку существуют не только старые браузеры (включая IE9, который не поддерживает WebSockets...), но и бесконечные части сетевых посредников, которые не говори WS Например, мы видели, что некоторые операторы мобильной связи в некоторых странах (например, Vodafone Italy) поддерживают WSS, но блокируют WS. Так что мир без кометовских "взломов" еще далеко... И позвольте мне добавить, лично, что я никогда не любил термин "хак", применяемый к комете (или, с более правильной исторической точки зрения, представление, примененное к HTTP Streaming и HTTP Long Polling). Проработав эти методы в течение 12 лет, я могу сказать, что мы смогли усовершенствовать их настолько, что они сами стали полноценной технологией, полностью надежной и используемой каждый день во многих критических сценариях производства (в финансах, аэрокосмической отрасли, и военные, чтобы назвать несколько отраслей).

Теперь давайте представим мир, где WebSockets универсально поддерживаются, и Comet больше не требуется. Что вы получаете именно? Ну, просто двунаправленный транспорт, не более того... Вдобавок к этому вам нужно построить все: протокол обмена сообщениями (возможно, основанный на pub/sub), интерфейс на стороне сервера для взаимодействия с кодом вашего сервера и хороший набор методов и алгоритмов оптимизации для управления потоком данных, включая управление полосой пропускания, сопоставление данных, автоматическое регулирование, разностную доставку и т. д. Хорошо то, что и протоколы обмена сообщениями, и механизмы оптимизации уже были реализованы хорошими решениями Comet, Таким образом, расширение прежних серверов Comet для поддержки WebSocket является естественной эволюцией, которую внедрили все мы, производители.

Таким образом, в двух словах, в ближайшем будущем WebSockets может привести к тому, что транспорты Comet устареют, но ему потребуется всасывать все более высокие уровни, уже реализованные и хорошо протестированные на традиционных серверах Comet.

Сначала я думал, что WebSockets реализует Comet. Они не альтернатива. Однако после некоторого обсуждения я был позже исправлен и убежден Алекс Расселом, создателем "Кометы", что это не имело место.

Comet, как говорит @kanaka, представляет собой набор принципов для симуляции двунаправленной связи между клиентом и сервером (продвижение сервера является половиной решения, и теперь оно обеспечивается событиями, отправляемыми сервером, и API источника событий).

Тем не менее, решения Comet являются взломом, потому что они работают непоследовательно во всех браузерах. По этой причине Алекс Рассел говорит:

Далее, являются ли веб-сокеты формой Comet? Или Comet - это просто HTTP-хаки? Я пойду на последнее определение. Фраза и хаки, вероятно, должны улететь на закат вместе. Я, например, приветствую наших не-HTTP повелителей в реальном времени. В той степени, в которой мы можем забыть о старых браузерах (и бог знает, что я делаю свое дело: http://google.com/chromeframe), мы все можем получить с помощью "веб-сокетов" и необходимость какого-либо конкретного зонтика уходит.

Итак, давайте сосредоточимся на этом: как мы можем привлечь пользователей в новую блестящую браузерную машину? Какое предложение мы можем им предложить о богатстве и опыте в реальном времени, которые может предоставить приложение, основанное на WebSockets? Комета о прошлом. Давайте сделаем будущее настоящим.

Я сейчас с Алексом. Тем не менее, Comet - решения HTTP - не устареет, пока:

  1. Поддержка браузера на 100%, и нам не нужны запасные варианты для
  2. Производители антивирусов (например, Avast!) Начинают поддерживать веб-технологии HTML5 и перестают вмешиваться в их программное обеспечение.
  3. Некоторая интернет-инфраструктура обновлена ​​для обеспечения поддержки WebSockets. В моем опыте подключения через WSS через порт 443 (безопасное соединение WebSocket) обычно означает, что соединения проходят через брандмауэры и прокси, но мы хотим, чтобы WS через порт 80 также всегда поддерживался.

Хотя WebSocket предоставляет на самом фундаментальном уровне способ двунаправленной связи между клиентом и сервером в контексте Интернета и HTTP, это простая форма связи.

Comet предоставляет больше функциональности поверх WebSocket (фактически, cometd даже поддерживает websocket) для следующих функций:

  • как опубликовать / подписаться и каналы связи
  • откат к более старым методам связи<->сервера клиента, когда websocket недоступен
Другие вопросы по тегам