Комета (программирование)
Comet — это модель веб-приложения в которой длительный HTTPS- запрос позволяет веб-серверу передавать , данные в браузер без явного запроса браузера. [1] [2] Комета — это общий термин , охватывающий множество методов достижения такого взаимодействия. Все эти методы основаны на функциях, включенных в браузеры по умолчанию, таких как JavaScript , а не на плагинах, отличных от стандартных. Подход Comet отличается от исходной модели Интернета , в которой браузер запрашивает полную веб-страницу за раз. [3]
Использование методов Comet в веб-разработке предшествовало использованию слова Comet как неологизма для коллективных методов. Комета известна под несколькими другими названиями, в том числе Аякс Пуш , [4] [5] Обратный Аякс , [6] Двусторонняя сеть , [7] HTTP-потоковая передача , [7] и HTTP-сервер push [8] среди других. [9] Термин «Комета» не является аббревиатурой, он был придуман Алексом Расселом в его сообщении в блоге в 2006 году . [а] [ нужна ссылка ]
В последние годы стандартизация и широкая поддержка событий, отправляемых через WebSocket и сервер, сделали модель Comet устаревшей.
История
[ редактировать ]Ранние Java-апплеты
[ редактировать ]Возможность встраивания Java-апплетов в браузеры (начиная с Netscape Navigator 2.0 в марте 1996 г.). [10] ) сделал возможной двустороннюю устойчивую связь с использованием необработанного TCP- сокета. [11] для связи между браузером и сервером. Этот сокет может оставаться открытым, пока браузер находится в документе, в котором размещен апплет. Уведомления о событиях могут отправляться в любом формате – текстовом или двоичном – и декодироваться апплетом.
Первая платформа связи между браузерами
[ редактировать ]Самым первым приложением, использующим связь между браузерами, было Tango Interactive. [12] [ не удалось пройти проверку ] реализован в 1996–98 годах в Северо-восточном центре параллельных архитектур ( NPAC ) Сиракузского университета при финансовой поддержке DARPA . Архитектура TANGO запатентована Сиракузским университетом. [13] Платформа TANGO широко используется в качестве инструмента дистанционного обучения. [14] Платформа была коммерциализирована компанией CollabWorx и использована в десятке приложений командования, управления и обучения в Министерстве обороны США. [ нужна ссылка ] .
Первые приложения Comet
[ редактировать ]Первый набор реализаций Comet датируется 2000 годом. [15] [ ненадежный источник? ] с проектами Pushlets , Lightstreamer и KnowNow. Pushlets , фреймворк, созданный Джастом ван ден Броке, был одним из первых [16] реализации с открытым исходным кодом. Pushlets были основаны на серверных Java-сервлетах и клиентской библиотеке JavaScript. Bang Networks – из Кремниевой долины стартап Netscape , поддерживаемый соучредителем Марком Андриссеном – предпринял щедро финансируемую попытку создать стандарт push-уведомлений в реальном времени для всей сети. [17]
В апреле 2001 года Чип Морнингстар приступил к разработке веб-сервера на базе Java (J2SE), который использовал два HTTP-сокета для поддержания открытых двух каналов связи между разработанным им пользовательским HTTP-сервером и клиентом, разработанным Дугласом Крокфордом ; действующая демонстрационная система существовала по состоянию на июнь 2001 года. [ нужна ссылка ] Сервер и клиент использовали формат сообщений, который основатели State Software, Inc. согласились назвать JSON по предложению Крокфорда . Вся система, клиентские библиотеки, формат сообщений, известный как JSON, и сервер стали State Application Framework, части которого продавались и использовались Sun Microsystems, Amazon.com, EDS и Volkswagen. [ нужна ссылка ]
В марте 2006 года инженер-программист Алекс Рассел в своем личном блоге ввёл термин «Комета». [18] Новый термин представлял собой игру на «Аяксе» ( «Аякс» и «Комета» — обычные бытовые чистящие средства в США). [19] [20] [21]
В 2006 году некоторые приложения представили эти методы более широкой аудитории: Meebo многопротокольное веб-приложение для чата позволяло пользователям подключаться к чат-платформам AOL , Yahoo и Microsoft через браузер; веб-чат Google добавил в Gmail ; JotSpot , стартап, который после приобретения Google создал систему совместного редактирования документов в режиме реального времени на базе Comet. [22] на основе Java Были созданы новые варианты Comet, такие как фреймворк ICEfaces JSF (хотя они предпочитают термин « Ajax Push »). [5] ). Другие, которые ранее использовали транспорты на основе Java-апплетов, вместо этого перешли на реализации на чистом JavaScript. [23]
Реализации
[ редактировать ]Приложения Comet пытаются устранить ограничения постраничной веб-модели и традиционного опроса , предлагая двустороннее устойчивое взаимодействие с использованием постоянного или длительного HTTP-соединения между сервером и клиентом. Поскольку браузеры и прокси-серверы не разработаны с учетом событий сервера, для достижения этой цели было разработано несколько методов, каждый из которых имеет свои преимущества и недостатки. Самым большим препятствием является спецификация HTTP 1.1, в которой говорится, что «эта спецификация... призывает клиентов быть консервативными при открытии нескольких соединений». [24] Таким образом, сохранение одного соединения открытым для событий реального времени отрицательно влияет на удобство использования браузера: браузеру может быть заблокирована от отправки нового запроса во время ожидания результатов предыдущего запроса, например, серии изображений. Эту проблему можно обойти, создав отдельное имя хоста для информации в реальном времени, которое является псевдонимом того же физического сервера. Эта стратегия представляет собой применение сегментирования домена.
Конкретные методы реализации Comet делятся на две основные категории: потоковая передача и длинный опрос .
Потоковое вещание
[ редактировать ]Приложение, использующее потоковую передачу Comet, открывает одно постоянное соединение от клиентского браузера к серверу для всех событий Comet . Эти события постепенно обрабатываются и интерпретируются на стороне клиента каждый раз, когда сервер отправляет новое событие, при этом ни одна из сторон не закрывает соединение. [3]
Конкретные методы реализации потоковой передачи Comet включают следующее:
Скрытый iframe
[ редактировать ]Базовый метод динамического веб-приложения — использование скрытого HTML-элемента iframe ( встроенного фрейма , который позволяет веб-сайту встраивать один HTML-документ в другой). Этот невидимый iframe отправляется как фрагментированный блок, который неявно объявляет его бесконечно длинным (иногда его называют «вечным кадром»). По мере возникновения событий iframe постепенно заполняется script
теги, содержащие JavaScript для выполнения в браузере. Поскольку браузеры отображают HTML-страницы постепенно, каждая script
тег выполняется по мере его получения. Некоторые браузеры требуют определенного минимального размера документа перед запуском синтаксического анализа и выполнения, который можно получить, первоначально отправив 1–2 КБ пробелов. [25]
Одним из преимуществ метода iframes является то, что он работает во всех распространенных браузерах. Двумя недостатками этого метода являются отсутствие надежного метода обработки ошибок и невозможность отслеживания состояния процесса вызова запроса. [25]
XMLHttpRequest
[ редактировать ]Объект XMLHttpRequest (XHR), инструмент, используемый приложениями Ajax для связи браузер-сервер, также может быть использован для обмена сообщениями Comet сервер-браузер путем создания пользовательского формата данных для ответа XHR и анализа каждого события с помощью браузера. боковой JavaScript; полагаясь только на то, что браузер запускает onreadystatechange
обратный вызов каждый раз, когда он получает новые данные.
Аякс с длинным опросом
[ редактировать ]![]() | Эта статья , возможно, содержит оригинальные исследования . ( декабрь 2017 г. ) |
Ни один из вышеперечисленных потоковых транспортов не работает во всех современных браузерах без негативных побочных эффектов. Это вынуждает разработчиков Comet реализовать несколько сложных потоковых транспортов, переключаясь между ними в зависимости от браузера. Следовательно, многие приложения Comet используют длинный опрос, который легче реализовать на стороне браузера и который работает, как минимум, в каждом браузере, поддерживающем XHR. Как следует из названия, длинный опрос требует, чтобы клиент опрашивал сервер на предмет события (или набора событий). Браузер отправляет серверу запрос в стиле Ajax, который остается открытым до тех пор, пока у сервера не появятся новые данные для отправки браузеру, которые отправляются браузеру в виде полного ответа. Браузер инициирует новый длинный запрос опроса для получения последующих событий. В документе IETF RFC 6202 «Известные проблемы и рекомендации по использованию длительного опроса и потоковой передачи в двунаправленном HTTP» сравнивается длинный опрос и потоковая передача HTTP.Конкретные технологии для выполнения длительного опроса включают следующее:
XMLHttpRequest длинный опрос
[ редактировать ]По большей части длинный опрос XMLHttpRequest работает так же, как и любое стандартное использование XHR. Браузер отправляет асинхронный запрос серверу, который может ожидать доступности данных, прежде чем ответить. Ответ может содержать закодированные данные (обычно XML или JSON ) или Javascript, которые будут выполняться клиентом. В конце обработки ответа браузер создает и отправляет еще один XHR, чтобы дождаться следующего события. Таким образом, браузер всегда сохраняет запрос к серверу, на который можно ответить по мере возникновения каждого события.
Длинный опрос тега сценария
[ редактировать ]Хотя любой транспорт Comet можно заставить работать между поддоменами , ни один из вышеперечисленных транспортов нельзя использовать в разных доменах второго уровня (SLD) из-за политик безопасности браузера, разработанных для предотвращения атак с использованием межсайтовых сценариев . [26] То есть, если основная веб-страница обслуживается с одного SLD, а сервер Comet расположен на другом SLD (на котором не включено совместное использование ресурсов между источниками ), события Comet не могут использоваться для изменения HTML и DOM основного page, используя эти транспорты. Эту проблему можно обойти, создав прокси-сервер перед одним или обоими источниками, чтобы они выглядели как происходящие из одного и того же домена. Однако это часто нежелательно по причинам сложности или производительности.
В отличие от объектов iframe или XMLHttpRequest, script
теги могут указываться на любой URI , а код JavaScript в ответе будет выполнен в текущем HTML-документе. Это создает потенциальную угрозу безопасности для обоих задействованных серверов, хотя риска для поставщика данных (в нашем случае сервера Comet) можно избежать, используя JSONP .
Транспорт Comet с длительным опросом можно создать путем динамического создания script
элементов и устанавливая их источник в расположение сервера Comet, который затем отправляет обратно JavaScript (или JSONP) с некоторым событием в качестве полезной нагрузки. Каждый раз, когда запрос сценария завершается, браузер открывает новый, как и в случае длинного опроса XHR. Преимущество этого метода заключается в том, что он является кроссбраузерным, но при этом допускает междоменную реализацию. [26]
Альтернативы
[ редактировать ]Браузерные технологии присущи термину Comet. Попытки улучшить HTTP-связь без опроса предпринимались с разных сторон:
- Рабочей группой Проект спецификации HTML 5, разработанный по технологиям веб-гипертекстовых приложений (WHATWG), определяет так называемые события, отправляемые сервером . [27] который определяет новый интерфейс JavaScript
EventSource
и новый тип MIMEtext/event-stream
. Все основные браузеры, кроме Microsoft Internet Explorer, поддерживают эту технологию. - Рабочий проект HTML 5 WebSocket API определяет метод создания постоянного соединения с сервером и получения сообщений через
onmessage
перезвонить. [28] - Протокол Байе от Фонда Додзё . Он оставляет транспорты, специфичные для браузера, и определяет протокол более высокого уровня для связи между браузером и сервером с целью разрешить повторное использование клиентского кода JavaScript с несколькими серверами Comet и позволить одному и тому же серверу Comet взаимодействовать. с несколькими реализациями JavaScript на стороне клиента. Байе основан на модели публикации/подписки, поэтому серверы, поддерживающие Байе, имеют встроенную функцию публикации/подписки. [29]
- Протокол BOSH от фонда стандартов XMPP. Он эмулирует двунаправленный поток между браузером и сервером, используя два синхронных HTTP-соединения.
- Объект JSONRequest, предложенный Дугласом Крокфордом , мог бы стать альтернативой объекту XHR. [30]
- Использование плагинов, таких как Java-апплеты или собственный Adobe Flash (с использованием протокола RTMP для потоковой передачи данных в приложения Flash). Их преимущество заключается в том, что они работают одинаково во всех браузерах с установленным соответствующим плагином и не требуют использования HTTP-соединений, но недостатком является необходимость установки плагина.
- Google объявил [31] новый Channel API для Google App Engine , [32] реализация Comet-подобного API с помощью клиентской библиотеки JavaScript в браузере. Этот API устарел. [33]
См. также
[ редактировать ]Примечания
[ редактировать ]- ^ Рассел, Алекс (4 марта 2006 г.). «Comet: данные с низкой задержкой для браузера» . Проверено 2 ноября 2014 г.
Ссылки
[ редактировать ]- ^ Крил, Пол (24 сентября 2007 г.). «Альянс AJAX признает гибридные приложения» . Инфомир . Проверено 20 октября 2010 г.
- ^ Крейн, Дэйв; Маккарти, Фил (13 октября 2008 г.). Comet и Reverse Ajax: Ajax 2.0 следующего поколения . Апресс . ISBN 978-1-59059-998-3 .
- ^ Jump up to: а б Гравелл, Роб. «Программирование Comet: использование Ajax для имитации отправки на сервер» . Webreference.com. Архивировано из оригинала 18 октября 2010 г. Проверено 20 октября 2010 г.
- ^ Эглофф, Андреас (5 мая 2007 г.). Ajax Push (он же Comet) с Java Business Integration (JBI) (речь). JavaOne 2007, Калифорния : Sun Microsystems , Inc. Сан-Франциско , Проверено 10 июня 2008 г.
{{cite speech}}
: CS1 maint: местоположение ( ссылка ) - ^ Jump up to: а б «Аякс Пуш» . ICEfaces.org . Проверено 23 октября 2014 г.
- ^ Крейн, Дэйв; Маккарти, Фил (июль 2008 г.). Comet и Reverse Ajax: Ajax 2.0 следующего поколения . Апресс. ISBN 978-1-59059-998-3 .
- ^ Jump up to: а б Махемофф, Майкл (июнь 2006 г.). «Веб-удаление» . Шаблоны проектирования Ajax . О'Рейли Медиа . стр. 19, 85 . ISBN 0-596-10180-5 .
- ^ Дабл, Крис (5 ноября 2005 г.). «Подробнее об Ajax и серверной отправке» . Различные способы отправки сервера . Проверено 5 мая 2008 г.
- ^ Несбитт, Брайс (1 ноября 2005 г.). «Техника медленной загрузки/обратный AJAX» . Имитация отправки сервера в стандартном веб-браузере . Архивировано из оригинала 8 февраля 2006 г. Проверено 6 мая 2008 г.
- ^ «Нетскейп.com» . Архивировано из оригинала 15 ноября 1996 года . Проверено 16 августа 2017 г.
{{cite web}}
: CS1 maint: bot: исходный статус URL неизвестен ( ссылка ) - ^ «java.net.Socket (Java 2 Platform SE v1.4.2)». Архивировано 19 мая 2009 г., на Wayback Machine.
- ^ Бека, Лукаш (1997). «ТАНГО — среда совместной работы во Всемирной паутине» . ПОВЕРХНОСТЬ Сиракузского университета . Северо-восточный параллельный архитектурный центр, Колледж инженерии и информатики . Проверено 27 февраля 2016 г.
- ^ Подгорный, Марек; Бека, Лукаш; Ченг, Банда; Фокс, Джеффри С.; Юрга, Томаш; Ольшевский, Конрад; Соколовский, Петр; Вальчак, Кшиштоф; PL (20 июня 2000 г.), Патент США: 6078948 - Независимая от платформы основа совместной работы и структура для формирования виртуальных сообществ, имеющих виртуальные комнаты с совместными сеансами , заархивировано из оригинала 09 мая 2017 г. , получено 27 февраля 2016 г.
- ^ Баер, Трой (1999). «Опыт использования TANGO Interactive в распределенном семинаре» (PDF) . Главный центр общих ресурсов CEWES . CEWES MSRC/PET TR/99-21. Архивировано из оригинала (PDF) 8 марта 2021 года . Проверено 27 февраля 2016 г.
- ^ «CometDaily: Комета и технология Push» . Архивировано из оригинала 13 ноября 2007 г. Проверено 15 декабря 2007 г.
- ↑ Джаст ван ден Броке (1 марта 2000 г.). « Пушлеты: отправка событий из сервлетов в клиентские браузеры DHTML. Архивировано 4 августа 2014 г. на Wayback Machine ». JavaWorld. Проверено 1 августа 2014 г.
- ^ Борланд, Джон (1 апреля 2001 г.). «Устареет ли кнопка «обновить»?» . Сети CNET . Проверено 22 июля 2008 г.
- ^ Алекс Рассел (3 марта 2006 г.). « Комета: данные с низкой задержкой для браузера, заархивированные 12 августа 2008 г. на Wayback Machine ». Блог Алекса Рассела. Проверено 29 ноября 2007 г.
- ^ К. Тафт, Дэррил (12 мая 2006 г.). «Microsoft удаляет Comet из набора инструментов AJAX» . eWEEK.com . Проверено 21 июля 2008 г.
- ^ На орбите: комета для масс: OSCON 2008 - Конференции О'Рейли, 21–25 июля 2008 г., Портленд, Орегон
- ^ Живая презентация Enterprise Comet & Web 2.0. Архивировано 20 мая 2008 г. на Wayback Machine.
- ↑ Дион Альмаер (29 сентября 2005 г.). « Jotspot Live: Live, групповые заметки » (интервью с Эйбом Феттигом). Аяксиан. Проверено 15 декабря 2007 г.
Мэтт Маршалл (15 декабря 2006 г.). « Ренкоо запускает сервис мероприятий — вовремя запланировать праздничные коктейли ». Венчурный бит. Проверено 15 декабря 2007 г. - ↑ Клинт Бултон (27 декабря 2005 г.). « Стартапы присоединяются к группе AJAX ». Новости DevX. Проверено 18 февраля 2008 г.
- ^ Протокол передачи гипертекста (HTTP/1.1): синтаксис сообщений и маршрутизация, раздел 6.4 . IETF. Проверено 29 июля 2014 г.
- ^ Jump up to: а б Холденер III, Энтони Т. (январь 2008 г.). «Макет страницы с несуществующими рамками». Аякс: Полное руководство . О'Рейли Медиа . п. 320. ИСБН 978-0-596-52838-6 .
- ^ Jump up to: а б Фланаган, Дэвид (17 августа 2006 г.). «13.8.4 Межсайтовый скриптинг». JavaScript: полное руководство . О'Рейли Медиа . п. 994 . ISBN 0-596-10199-6 .
- ^ Ян Хиксон, изд. (27 октября 2007 г.). «6.2 События DOM, отправленные сервером» . HTML 5 — запрос комментариев . ЧТОРГ . Проверено 7 октября 2008 г.
- ^ Хиксон, Ян (23 апреля 2009 г.). «API WebSocket» . W3C . Проверено 21 июля 2009 г.
- ^ Алекс Рассел; и др. (2007). «Протокол Байе — Байе 1.0draft1» . Фонд Додзё . Проверено 14 декабря 2007 г.
- ^ Крокфорд, Дуглас (17 апреля 2006 г.). «Дуплекс JSONRequest» . Альтернатива XMLHttpRequest для длительной отправки данных, инициированной сервером . Проверено 5 мая 2008 г.
- ^ Приложение, The. (2010-12-02) Блог Google App Engine: С праздником от команды App Engine — выпущен SDK 1.4.0 . Googleappengine.blogspot.com. Проверено 12 апреля 2014 г.
- ^ Пол, Райан. (06.12.2010) App Engine получает API потоковой передачи и более длительные фоновые задачи . Арс Техника. Проверено 12 апреля 2014 г.
- ^ «Пакет com.google.appengine.api.channel» . 16.11.2019 . Проверено 30 апреля 2020 г.
Этот API устарел.
Внешние ссылки
[ редактировать ]- «Комета Дейли» . Архивировано из оригинала 4 января 2008 г. Проверено 29 ноября 2007 г.
Comet Daily предоставляет информацию о методах Comet.
*