Технология Push, также известная как Server Push, относится к методу коммуникации, где коммуникация инициируется сервером, а не клиентом. Этот подход отличается от метода « pull », где коммуникация инициируется клиентом. [1]
В технологии push клиенты могут выражать свои предпочтения в отношении определенных типов информации или данных, как правило, с помощью процесса, известного как модель публикации-подписки . В этой модели клиент «подписывается» на определенные информационные каналы, размещенные на сервере. Когда на этих каналах появляется новый контент, сервер автоматически отправляет или «проталкивает» эту информацию подписанному клиенту.
При определенных условиях, таких как ограничительные политики безопасности, блокирующие входящие HTTP- запросы, push-технология иногда имитируется с помощью техники, называемой опросом. В этих случаях клиент периодически проверяет сервер на наличие новой информации, а не получает автоматические обновления.
Синхронные конференции и мгновенные сообщения являются примерами push-сервисов. Сообщения чата и иногда файлы отправляются пользователю сразу после их получения службой обмена сообщениями. Как децентрализованные одноранговые программы (например, WASTE ), так и централизованные программы (например, IRC или XMPP ) позволяют отправлять файлы, что означает, что отправитель инициирует передачу данных, а не получатель.
Электронная почта также может быть push-системой: SMTP — это push-протокол (см. Push e-mail ). Однако последний шаг — от почтового сервера до настольного компьютера — обычно использует pull-протокол, такой как POP3 или IMAP . Современные почтовые клиенты делают этот шаг мгновенным, многократно опрашивая почтовый сервер, часто проверяя его на наличие новой почты. Протокол IMAP включает команду IDLE , которая позволяет серверу сообщать клиенту о поступлении новых сообщений. Оригинальный BlackBerry был первым популярным примером push-email в беспроводном контексте. [ необходима цитата ]
Другим примером является PointCast Network , которая широко освещалась в 1990-х годах. Она доставляла новости и данные фондового рынка в качестве заставки. И Netscape , и Microsoft интегрировали технологию push через Channel Definition Format (CDF) в свое программное обеспечение в разгар войны браузеров , но она никогда не была очень популярной. CDF сошла на нет и была удалена из браузеров того времени, замененная в 2000-х годах на RSS (система pull).
Другие варианты использования веб-приложений с поддержкой push-уведомлений включают распространение обновлений программного обеспечения («push-обновления»), распространение рыночных данных (биржевые тикеры), онлайн-чаты/системы обмена сообщениями ( веб-чаты ), аукционы, онлайн-ставки и игры, результаты спортивных состязаний, консоли мониторинга и мониторинг сенсорных сетей .
Предложение Web push от Internet Engineering Task Force представляет собой простой протокол, использующий HTTP версии 2 для доставки событий в реальном времени, таких как входящие звонки или сообщения, которые могут быть доставлены (или «продвинуты») своевременно. Протокол объединяет все события в реальном времени в один сеанс, что обеспечивает более эффективное использование сетевых и радиоресурсов. Единая служба объединяет все события, распределяя их по приложениям по мере их поступления. Для этого требуется всего один сеанс, что позволяет избежать дублирования накладных расходов. [2]
Веб-уведомления являются частью стандарта W3C и определяют API для уведомлений конечного пользователя. Уведомление позволяет оповещать пользователя о событии, таком как доставка электронного письма, вне контекста веб-страницы. [3] В рамках этого стандарта Push API полностью реализован в Chrome , Firefox и Edge и частично реализован в Safari по состоянию на февраль 2023 года [обновлять]. [4] [5]
HTTP-сервер push (также известный как HTTP-потоковая передача) — это механизм отправки незапрошенных (асинхронных) данных с веб-сервера на веб-браузер . HTTP-сервер push может быть реализован с помощью любого из нескольких механизмов.
Являясь частью HTML5, API веб-сокетов позволяет веб-серверу и клиенту взаимодействовать через полнодуплексное TCP-соединение.
Обычно веб-сервер не завершает соединение после того, как данные ответа были переданы клиенту. Веб-сервер оставляет соединение открытым, так что если происходит событие (например, изменение внутренних данных, о котором необходимо сообщить одному или нескольким клиентам), оно может быть отправлено немедленно; в противном случае событие должно быть поставлено в очередь до получения следующего запроса клиента. Большинство веб-серверов предлагают эту функциональность через CGI (например, скрипты Non-Parsed Headers на Apache HTTP Server ). Базовый механизм для этого подхода — кодирование передачи по частям .
Другой механизм связан со специальным типом MIME , называемым multipart/x-mixed-replace
, который был представлен Netscape в 1995 году. Веб-браузеры интерпретируют его как документ, который изменяется всякий раз, когда сервер отправляет новую версию клиенту. [6] Он по-прежнему поддерживается Firefox , Opera и Safari сегодня, но игнорируется Internet Explorer [7] и лишь частично поддерживается Chrome . [8] Его можно применять к документам HTML , а также для потоковой передачи изображений в приложениях веб-камеры .
Предложение WHATWG Web Applications 1.0 [9] включает механизм передачи контента клиенту. 1 сентября 2006 года веб-браузер Opera реализовал эту новую экспериментальную систему в функции под названием « Server-Sent Events ». [10] [ 11] Теперь это часть стандарта HTML5 . [12]
В этом методе сервер использует преимущества постоянных HTTP-соединений , оставляя ответ постоянно «открытым» (т. е. сервер никогда не завершает ответ), эффективно обманывая браузер, чтобы он оставался в режиме «загрузки» после того, как начальная загрузка страницы может считаться завершенной. Затем сервер периодически отправляет фрагменты JavaScript для обновления содержимого страницы, тем самым достигая возможности push-уведомлений. При использовании этого метода клиенту не нужны Java-апплеты или другие плагины для поддержания открытого соединения с сервером; клиент автоматически уведомляется о новых событиях, отправляемых сервером. [13] [14] Однако одним серьезным недостатком этого метода является отсутствие контроля со стороны сервера над тайм-аутом браузера; обновление страницы всегда необходимо, если тайм-аут происходит на стороне браузера.
Длительный опрос сам по себе не является настоящим push-запросом; длительный опрос — это разновидность традиционной техники опроса, но он позволяет эмулировать механизм push-запроса в ситуациях, когда реальный push-запрос невозможен, например, на сайтах с политиками безопасности, требующими отклонения входящих HTTP-запросов.
При длинном опросе клиент запрашивает дополнительную информацию с сервера точно так же, как и при обычном опросе, но с ожиданием, что сервер может не ответить немедленно. Если у сервера нет новой информации для клиента при получении опроса, то вместо отправки пустого ответа сервер удерживает запрос открытым и ждет, пока информация об ответе станет доступной. Как только у него появляется новая информация, сервер немедленно отправляет HTTP-ответ клиенту, завершая открытый HTTP-запрос. После получения ответа сервера клиент часто немедленно отправляет другой запрос к серверу. Таким образом, обычная задержка ответа (время между тем, когда информация впервые становится доступной, и следующим запросом клиента), в противном случае связанная с опросом клиентов, устраняется. [15]
Например, BOSH — это популярная, долгоживущая технология HTTP, используемая в качестве альтернативы непрерывному TCP-соединению с длительным опросом, когда такое соединение трудно или невозможно использовать напрямую (например, в веб-браузере); [16] это также базовая технология в XMPP , которую Apple использует для поддержки push-уведомлений iCloud.
Этот метод, используемый чат- приложениями, использует объект XML Socket в однопиксельном фильме Adobe Flash . Под управлением JavaScript клиент устанавливает TCP-соединение с однонаправленным ретранслятором на сервере. Ретрансляционный сервер ничего не считывает из этого сокета ; вместо этого он немедленно отправляет клиенту уникальный идентификатор . Затем клиент делает HTTP-запрос к веб-серверу, включая этот идентификатор. Затем веб-приложение может отправлять сообщения, адресованные клиенту, на локальный интерфейс ретрансляционного сервера, который ретранслирует их через сокет Flash. Преимущество этого подхода заключается в том, что он учитывает естественную асимметрию чтения-записи, типичную для многих веб-приложений, включая чат, и, как следствие, обеспечивает высокую эффективность. Поскольку он не принимает данные на исходящих сокетах, ретрансляционному серверу вообще не нужно опрашивать исходящие TCP-соединения , что позволяет держать открытыми десятки тысяч одновременных соединений. В этой модели пределом масштабирования является TCP-стек базовой серверной операционной системы.
В таких сервисах, как облачные вычисления , для повышения надежности и доступности данных они обычно передаются (реплицируются) на несколько машин. Например, распределенная файловая система Hadoop (HDFS) создает 2 дополнительные копии любого хранимого объекта. RGDD фокусируется на эффективном приведении объекта из одного места во многие, экономя при этом пропускную способность за счет отправки минимального количества копий (в лучшем случае только одной) объекта по любому каналу в сети. Например, Datacast [17] — это схема доставки на множество узлов внутри центров обработки данных, которая опирается на регулярные и структурированные топологии, а DCCast [18] — это аналогичный подход для доставки между центрами обработки данных.
Push-уведомление — это сообщение, которое «проталкивается» с внутреннего сервера или приложения в пользовательский интерфейс, например, мобильные приложения [19] или настольные приложения. Apple представила push-уведомления для iPhone в 2009 году, [20] а в 2010 году Google выпустила «Google Cloud to Device Messaging» (замененный Google Cloud Messaging , а затем Firebase Cloud Messaging ). [21] В ноябре 2015 года Microsoft объявила, что служба уведомлений Windows будет расширена для использования архитектуры универсальной платформы Windows, что позволит отправлять push-данные в Windows 10 , Windows 10 Mobile , Xbox и другие поддерживаемые платформы с помощью универсальных вызовов API и запросов POST. [22]
Push-уведомления в основном делятся на два подхода: локальные уведомления и удаленные уведомления. [23] Для локальных уведомлений приложение планирует уведомление с ОС локального устройства. Для удаленных уведомлений приложение устанавливает таймер в самом приложении, при условии, что оно может непрерывно работать в фоновом режиме. Когда наступает запланированное время события или выполняется запрограммированное условие события, сообщение отображается в пользовательском интерфейсе приложения.
Удаленные уведомления обрабатываются удаленным сервером. В этом сценарии клиентское приложение должно быть зарегистрировано на сервере с уникальным ключом (например, UUID ). Затем сервер запускает сообщение с уникальным ключом, чтобы доставить его клиенту через согласованный клиент-серверный протокол, такой как HTTP или XMPP , и клиент отображает полученное сообщение. Когда приходит push-уведомление, оно может передавать короткие уведомления и сообщения, устанавливать значки на значках приложений, мигать или непрерывно светить светодиод уведомления или воспроизводить звуковые сигналы для привлечения внимания пользователя. [24] Push-уведомления обычно используются приложениями для привлечения внимания пользователей к информации. Содержимое сообщений можно классифицировать по следующим примерным категориям:
Push-уведомления в режиме реального времени могут вызывать проблемы с конфиденциальностью, поскольку они могут использоваться для привязки виртуальных личностей псевдонимов социальных сетей к реальным личностям владельцев смартфонов. [26] Использование ненужных push-уведомлений в рекламных целях подвергалось критике как пример кражи внимания. [27]