Введение

Метод сетевой связи, при котором запросы отправляются издателем. Технология Push, также известная как push-уведомления с сервера, – это метод связи, при котором соединение инициируется сервером, а не клиентом. Этот подход отличается от метода "pull", когда соединение инициируется клиентом. В технологии Push клиенты могут указывать свои предпочтения относительно определенных типов информации или данных, как правило, посредством модели "публикация-подписка". В этой модели клиент "подписывается" на определенные информационные каналы, размещенные на сервере. Когда новый контент становится доступным в этих каналах, сервер автоматически отправляет, или "передает" (push), эту информацию подписанному клиенту. В определенных условиях, например, при наличии строгих политик безопасности, блокирующих входящие HTTP-запросы, технология Push иногда эмулируется с помощью метода, называемого опросом (polling). В таких случаях клиент периодически опрашивает сервер на предмет наличия новой информации, вместо получения автоматических обновлений.

Общее применение

Синхронные конференции и обмен мгновенными сообщениями — примеры push-сервисов. Чат-сообщения и иногда файлы отправляются пользователю сразу после получения их службой обмена сообщениями. И децентрализованные одноранговые программы (такие как WASTE), и централизованные программы (такие как IRC или XMPP) позволяют передавать файлы, что означает, что отправитель инициирует передачу данных, а не получатель. Электронная почта также может быть push-системой: SMTP — это push-протокол (см. Push e-mail). Однако последний этап — от почтового сервера к настольному компьютеру — обычно использует протокол pull, такой как POP3 или IMAP. Современные почтовые клиенты делают этот этап практически мгновенным, многократно опрашивая почтовый сервер и часто проверяя наличие новой почты. Протокол IMAP включает команду IDLE, которая позволяет серверу уведомлять клиента о поступлении новых сообщений. Оригинальный BlackBerry стал первым популярным примером push-электронной почты в беспроводной среде. Другой пример — сеть PointCast, широко освещавшаяся в 1990-х годах. Она доставляла новости и данные фондового рынка в виде заставки. Netscape и Microsoft интегрировали push-технологию через формат определения канала (CDF) в своё программное обеспечение в период ожесточённой конкуренции браузеров, но она не получила широкого распространения. CDF устарела и была удалена из браузеров того времени, а в 2000-х годах заменена RSS (системой pull). Другие примеры использования веб-приложений с поддержкой push включают распространение обновлений программного обеспечения ("push updates"), распространение рыночных данных (биржевые котировки), онлайн-чаты/системы обмена сообщениями (webchat), аукционы, онлайн-ставки и игры, спортивные результаты, консоли мониторинга и мониторинг сети датчиков.

Веб-посылка

Предложение Web push от Internet Engineering Task Force — это простой протокол, использующий HTTP версии 2 для доставки событий в реальном времени, таких как входящие вызовы или сообщения, которые могут быть доставлены (или "отправлены") своевременно. Протокол объединяет все события в реальном времени в единую сессию, что обеспечивает более эффективное использование сетевых и радиоресурсов. Единый сервис консолидирует все события, распределяя их приложениям по мере поступления. Для этого требуется только одна сессия, что позволяет избежать дублирования накладных расходов. Веб-уведомления являются частью стандарта W3C и определяют API для уведомлений конечных пользователей. Уведомление позволяет оповещать пользователя о событии, например, о доставке электронного письма, вне контекста веб-страницы. В рамках этого стандарта Push API полностью реализован в Chrome, Firefox и Edge, а в Safari — частично, по состоянию на 2023 год.

HTTP-серверный провод

HTTP-серверный проталкиватель (также известный как HTTP-потоковая передача) — это механизм отправки не запрошенных (асинхронных) данных с веб-сервера в веб-браузер. HTTP-серверный пуш может быть реализован различными способами. В рамках HTML5 API Web Socket позволяет веб-серверу и клиенту общаться по полнодуплексному TCP-соединению. Обычно веб-сервер не закрывает соединение после отправки данных ответа клиенту, а оставляет его открытым, чтобы при возникновении события (например, изменения внутренних данных, о котором необходимо уведомить одного или нескольких клиентов) можно было отправить его немедленно, а не ставить в очередь до следующего запроса клиента. Большинство веб-серверов предоставляют эту функциональность через CGI (например, скрипты Non Parsed Headers на сервере Apache HTTP). Базовый механизм этого подхода — это фрагментированная передача данных. Другой механизм связан со специальным MIME-типом multipart/x mixed replace, представленным Netscape в 1995 году. Веб-браузеры интерпретируют его как документ, который обновляется при каждой отправке сервером новой версии клиенту. Он по-прежнему поддерживается браузерами Firefox, Opera и Safari, но игнорируется Internet Explorer и частично поддерживается Chrome. Его можно использовать для HTML-документов, а также для потоковой передачи изображений в приложениях для веб-камер. В предложении WHATWG Web Applications 1.0 предусмотрен механизм для отправки контента клиенту. 1 сентября 2006 года браузер Opera реализовал эту новую экспериментальную систему в функции под названием "Server-Sent Events" (События, отправляемые сервером). В настоящее время она является частью стандарта HTML5.

Пушлет

В этом методе сервер использует преимущества постоянных HTTP-соединений, оставляя ответ постоянно "открытым" (то есть сервер никогда не завершает ответ), эффективно заставляя браузер оставаться в режиме "загрузки" даже после того, как первоначальная загрузка страницы может считаться завершенной. Затем сервер периодически отправляет фрагменты JavaScript для обновления содержимого страницы, тем самым реализуя функциональность push. Используя эту технику, клиенту не требуются Java-апплеты или другие плагины для поддержания открытого соединения с сервером; клиент автоматически получает уведомления о новых событиях, передаваемых сервером. Однако серьезным недостатком этого метода является отсутствие у сервера контроля над временем ожидания соединения браузером; при возникновении тайм-аута на стороне браузера всегда требуется обновление страницы.

Долгий опрос

Длинный опрос сам по себе не является настоящим push-уведомлением; это разновидность традиционной техники опроса, но она позволяет эмулировать механизм push-уведомлений в ситуациях, когда реальное push-уведомление невозможно, например, на сайтах с политиками безопасности, требующими отклонения входящих HTTP-запросов. При использовании длинного опроса клиент запрашивает у сервера больше информации, как и при обычном опросе, но ожидает, что сервер может не ответить немедленно. Если у сервера нет новой информации для клиента в момент получения запроса, вместо отправки пустого ответа сервер удерживает запрос открытым и ждет, пока не появятся данные для ответа. Как только новая информация становится доступной, сервер немедленно отправляет HTTP-ответ клиенту, завершая открытый HTTP-запрос. Получив ответ сервера, клиент часто немедленно отправляет новый запрос. Таким образом, устраняется обычная задержка ответа (время между моментом появления информации и следующим запросом клиента), характерная для клиентов, использующих опрос. Например, BOSH – это популярная, долгоживущая HTTP-технология, используемая как альтернатива постоянному TCP-соединению при длинном опросе, когда такое соединение сложно или невозможно использовать напрямую (например, в веб-браузере); она также является базовой технологией XMPP, которую Apple использует для поддержки push-уведомлений iCloud.

Реле сокетов Flash XML

Этот метод, используемый в чат-приложениях, использует объект XML Socket в однопиксельном Adobe Flash-фильме. Под управлением JavaScript клиент устанавливает TCP-соединение с однонаправленным реле на сервере. Релейный сервер не читает данные из этого сокета, а немедленно отправляет клиенту уникальный идентификатор. Затем клиент отправляет HTTP-запрос веб-серверу, включая этот идентификатор. Веб-приложение может отправлять сообщения, предназначенные для клиента, в локальный интерфейс релейного сервера, который пересылает их через Flash-сокет. Преимущество этого подхода заключается в том, что он учитывает естественную асимметрию чтения и записи, характерную для многих веб-приложений, включая чаты, и, как следствие, обеспечивает высокую эффективность. Поскольку релейный сервер не принимает данные на исходящих сокетах, ему не требуется опрос исходящих TCP-соединений, что позволяет поддерживать десятки тысяч одновременных соединений. В данной модели масштабируемость ограничена TCP-стеком операционной системы сервера.

Достоверная передача групповых данных (RGDD)

В таких сервисах, как облачные вычисления, для повышения надежности и доступности данных, они обычно реплицируются на несколько машин. Например, распределенная файловая система Hadoop (HDFS) создает 2 дополнительных копии любого хранимого объекта. RGDD фокусируется на эффективном распространении объекта из одного источника к множеству получателей, экономя при этом пропускную способность за счет отправки минимального количества копий (в лучшем случае – всего одной) объекта по любой линии связи в сети. Например, Datacast – это схема доставки данных множеству узлов внутри центров обработки данных, основанная на регулярных и структурированных топологиях, а DCCast – аналогичный подход для доставки данных между центрами обработки данных.

Уведомление push

Push-уведомление — это сообщение, которое "отправляется" с серверной части или приложения на пользовательский интерфейс, например, в мобильных или настольных приложениях. Компания Apple представила push-уведомления для iPhone в 2009 году, а в 2010 году Google выпустила "Google Cloud to Device Messaging" (впоследствии замененную на Google Cloud Messaging, а затем на Firebase Cloud Messaging). В ноябре 2015 года Microsoft объявила о расширении Службы уведомлений Windows для использования архитектуры Универсальной платформы Windows, что позволяет отправлять push-данные на Windows 10, Windows 10 Mobile, Xbox и другие поддерживаемые платформы с помощью универсальных вызовов API и POST-запросов. Push-уведомления в основном делятся на два типа: локальные и удаленные. Для локальных уведомлений приложение планирует уведомление с помощью операционной системы устройства. Для удаленных уведомлений приложение устанавливает таймер внутри себя, при условии, что оно может непрерывно работать в фоновом режиме. Когда наступает запланированное время события или выполняется запрограммированное условие, сообщение отображается в пользовательском интерфейсе приложения. Удаленные уведомления обрабатываются удаленным сервером. В этом случае клиентское приложение должно быть зарегистрировано на сервере с уникальным ключом (например, UUID). Затем сервер отправляет сообщение по этому уникальному ключу для доставки клиенту через согласованный протокол клиент-сервер, такой как HTTP или XMPP, и клиент отображает полученное сообщение. При получении push-уведомления оно может передавать короткие уведомления и сообщения, устанавливать значки на иконках приложений, мигать или постоянно подсвечивать светодиод уведомлений, либо воспроизводить звуковые сигналы для привлечения внимания пользователя. Приложения обычно используют push-уведомления, чтобы донести информацию до пользователей. Содержание сообщений можно классифицировать следующим образом:
Сообщения в чате из приложений для обмена сообщениями, таких как Facebook Messenger, отправленные другими пользователями. Специальные предложения от продавцов: продавец может захотеть рекламировать свои предложения клиентам. Напоминания о событиях: некоторые приложения могут позволить пользователю создать напоминание или оповещение на определенное время. Изменения в подписанных темах: пользователи могут захотеть получать обновления о погоде в своем регионе или отслеживать изменения на веб-странице. Push-уведомления в режиме реального времени могут вызывать опасения по поводу конфиденциальности, поскольку их можно использовать для привязки виртуальных идентификаторов псевдонимов в социальных сетях к реальным личностям владельцев смартфонов. Использование ненужных push-уведомлений в рекламных целях критикуется как пример посягательства на внимание.