img

Протокол XMPP: что это такое, для чего используется и где он нужен

21 ноября
20:00
Бесплатный вебинар
Введение в Docker
Ведущий — Филипп Игнатенко.
Руководитель блока развития российской облачной платформы Digital Energy (группа компаний Ростелеком)
Записаться
img
img

В начале 2000-х, когда идея мессенджеров только формировалась, расширяемый протокол обмена сообщениями и информацией о присутствии (XMPP) позволял разработчикам создавать интерактивные чат-приложения. С момента своего появления этот протокол прошел долгий путь и теперь включен в технический стек (или фреймворк), рекомендованный для разработки высококачественных веб-приложений, таких как WhatsApp (принадлежит компании Meta, деятельность которой признана в России экстремистской и запрещена).

Спустя более двух десятилетий этот протокол все еще не утратил своей актуальности и значимости среди множества других протоколов. Почему это так? Что делает XMPP актуальным? Какие ключевые особенности? Давайте лучше познакомимся с ним.

Что такое XMPP 

Extensible Messaging and Presence Protocol (расширяемый протокол обмена сообщениями и присутствием)? Это протокол, основанный на XML, который обычно используется в открытых стандартах связи. Если сказать кратко, это чат-протокол, который позволяет легко и беспрепятственно передавать XML-компоненты, такие как данные. Помимо обеспечения обмена мгновенными сообщениями и реальных разговоров в режиме реального времени, XMPP также применяется для управления списком контактов и информации о статусе присутствия.

Где используется протокол 

XMPP чаще всего используется для прямого обмена сообщениями между двумя точками, проверки статуса пользователя и передачи этой информации серверу. Протокол также отвечает за хранение статуса сервера, управление подписками, обновление списка контактов и блокировку определённых пользователей.

Характеристики XMPP

  • Протокол является децентрализованным.
  • Поддерживает асинхронный обмен данными/информацией.
  • Передает небольшие фрагменты данных вместо отправки больших блоков.
  • Работает поверх TCP.
  • Его сетевая конфигурация и компоненты (аппаратные/программные) не влияют на передачу данных на основе XMPP.
  • Разработан для модели "клиент-сервер".
  • Использует три статуса: «офлайн», «занят» или «онлайн» для указания статуса пользователя или сети.
  • Передает данные между двумя конечными точками.

Архитектура XMPP 

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

На схеме выше наглядно показана архитектура XMPP.

Однако в сложной реализации могут существовать несколько XMPP-шлюзов. В таком случае протокол также должен обеспечивать междоменную маршрутизацию. Шлюзы выполняют роль переводчика между различными протоколами и доменами, участвующими в обмене информацией.

Кроме того, XMPP-шлюз обрабатывает задачи, такие как запуск и завершение сеансов "клиент-сервер" для соответствующего протокола, включая необходимые элементы перевода протоколов.

Даже при использовании значительного количества шлюзов и доменов можно добиться постоянной связи между всеми точками сети с помощью XMPP.

Для лучшего понимания архитектуры XMPP важно разобраться в некоторых терминах.

Например, вам нужно знать о XMPP-станзах. Это небольшие XML-фрагменты, используемые для начала сеанса связи. Существует три типа станз:

  • Станза присутствия (presence stanza) определяет текущий статус сети или пользователя для других. Например, пользователь/сеть онлайн или офлайн.
  • Станза сообщения (message stanza) — это инструмент, необходимый для обмена сообщениями в чате.
  • Станза запроса информации (IQ stanza) — элемент, который XMPP использует для запроса или изменения данных. Аналогично тому, как HTTP использует методы GET и POST, XMPP использует станзу IQ.

Как работает протокол XMPP?

Вся обработка XMPP основана на архитектуре "клиент-сервер", где сообщения сначала передаются на сервер, а затем клиентам.

Чтобы определить, какому клиенту отправить сообщение, XMPP-сервер использует уникальный ID получателя. Уникальный ID или Jabber ID очень похож на адрес электронной почты с незначительными изменениями.

Формат Jabber ID: user@domain.com/resource.

Здесь user — это имя пользователя, domain.com — это домен отправителя, а resource — это тип устройства получателя сообщения. Например:

John@technology.testing/terminal.

В этом примере John — имя пользователя, technology.testing — домен, а terminal — это тип устройства или ресурса, используемого Джоном. Часть "resource" является необязательной, в то время как предыдущие две части обязательны.

XMPP-сервер использует этот Jabber ID для правильной маршрутизации сообщения по TCP-соединению. Как только начинается сеанс связи, XML-поток отправляется на сервер, и идентификация клиента выполняется с помощью Jabber ID.

После идентификации сервер получит запрос и инициирует передачу еще одного XML-потока. Этот поток будет отправлен обратно от сервера к клиенту. Таким образом, каждый XML-поток становится двунаправленным.

XMPP позволяет создать масштабную сеть обмена сообщениями, называемую федерацией. С помощью федерации клиенты могут взаимодействовать с несколькими XMPP-серверами одновременно.

Особенности XMPP

Основные особенности, которые выделяют XMPP среди других протоколов:

Асинхронная Передача Сообщений 

С XMPP возможно непрерывное и асинхронное получение сообщений. Это означает, что сообщения отправляются последовательно, без ожидания ответа от получателя или отправителя и без необходимости быть онлайн для получения сообщения. Сообщения передаются в виде XML-станз — уникальных информационных единиц, содержащих такие сегменты, как метаданные, текст сообщения и уникальный ID отправителя и получателя.

Отличие XMPP от других клиент-серверных систем заключается в том, что XMPP не поддерживает опрос (polling). Опрос — это процесс, при котором клиент постоянно запрашивает сервер, есть ли новая информация. Так как опрос происходит с определёнными интервалами, для конечного пользователя отсутствует моментальный опыт общения. Кроме того, это приводит к чрезмерному потреблению полосы пропускания.

Вместо этого XMPP автоматически передаёт новое сообщение на сервер, даже если предыдущий запрос ещё не обработан или получен сервером. Это происходит и в обратном направлении, от сервера к клиенту. Это создаёт моментальный опыт общения для пользователей.

Архитектура Клиент-Сервер 

Это основная архитектура, которую использует XMPP. В этой архитектуре XMPP передает лишь небольшую часть XML-элементов. Этот портативный XML-элемент сначала доходит до сервера, а затем до пользователя.

Клиентам XMPP присваиваются уникальные имена, подобно электронной почте. Этот уникальный ID используется для идентификации клиента и маршрутизации сообщения в правильном направлении. Таким образом, XMPP гарантирует, что каждый клиент XMPP использует фиксированный и стандартный маршрут для подключения к серверу.

Постоянные TCP-соединения 

Изначально XMPP может передавать данные или устанавливать соединение только через TCP. Соединение, установленное таким образом, является постоянным и не требует повторного установления при передаче нового сообщения.

Таким образом, XMPP создает XML-поток, поддерживающий свободный обмен XML-данными. Однако некоторые современные расширения XMPP теперь также используют TLS и WebSockets.

Децентрализованный хостинг 

Под децентрализованным хостингом понимается отсутствие центрального управляющего сервера. Любой может управлять, запускать и обслуживать XMPP-серверы. Кроме того, предоставлена свобода установки серверов как в облаке, так и на собственных серверах. Это похоже на электронную почту, где каждый владелец почты может настроить почтовые ящики по своему усмотрению, установив логин, пароль и другие параметры.

Шлюзы 

Еще одной отличительной особенностью XMPP является наличие шлюзов для множества чат- и мессенджер-протоколов. XMPP совместим с различными протоколами и может подключаться к сетям на длительное время.

Например, одна и та же XMPP-сеть может получить доступ к SMS-домену, когда сообщение отправляется на мобильный телефон, и одновременно к SMTP-домену, чтобы доставить то же сообщение на электронную почту получателя. Также XMPP может использовать другие протоколы сообщений, такие как IRC, для передачи сообщения в другой форме.

Примеры Протокола XMPP

XMPP стал основой для многих популярных коммуникационных приложений. Вот некоторые из них:

  • WhatsApp использует собственную версию XMPP.
  • Возможности чата Zoom обеспечены XMPP.
  • Для мгновенных push-уведомлений Apple использует XMPP как в iPhone, так и в Mac.
  • Grindr использует XMPP для своей функциональности чата.
  • Для разработки высокофункциональных чатов XMPP является одним из множества предложений, но продолжает быть предпочтительным благодаря своим уникальным особенностям и преимуществам.

Преимущества XMPP

Поддерживаемый IETF и принятый тысячами разработчиков, XMPP стал основным открытым стандартом для разработки чатов.

С отличными характеристиками XMPP заполнил пробелы, оставленные строгими протоколами, и утвердился как необходимость для одноранговой связи и не только.

Вот основные преимущества использования протокола XMPP:

Надежность

Этот протокол служит сообществу разработчиков более 20 лет. За это время протокол укрепил свою инфраструктуру и получил большую поддержку сообщества. В настоящее время существует множество XMPP-серверов, и он является основой для многих приложений. Это подтверждает, что протокол испытан временем и имеет отличную техническую поддержку. Если это вас не впечатляет, то бесплатность и простота XMPP наверняка понравятся.

Улучшенная коммуникационная инфраструктура

Как высоко расширяемый протокол, XMPP позволяет пользователям обмениваться различными видами медиа и сообщений. Он поддерживает создание эффективной коммуникационной инфраструктуры независимо от типа передаваемых данных.

Гарантия доставки 

С XMPP можно быть уверенным в доставке сообщений, так как он использует постоянное соединение через TCP. Протокол практически не пропустит ни одного XML-фрагмента, независимо от его размера.

Поддержка большинства языков программирования 

Массовое принятие и глобальный спрос привели к поддержке различных языков. Библиотеки XMPP доступны на многих популярных языках, таких как Perl, C++, C#, Java, Python и многих других. Вы назовите язык, и библиотека XMPP, скорее всего, будет с ним совместима. Это позволило разработчикам работать в удобной и совместимой экосистеме.

Децентрализованность 

XMPP децентрализован и допускает множество реализаций. Нет ограничений на настройку серверов и библиотек. Каждый может использовать XMPP, что предоставляет больше свободы и гибкости.

Повышенная безопасность 

Улучшенная безопасность является дополнительным преимуществом XMPP. При настройке различных XMPP-серверов разработчики могут выбирать шифрование, протоколы безопасности и предпочтения доступа по своему усмотрению. Безопасность находится под полным контролем, что снижает количество кибератак и повышает уровень доверия.

Непрерывная передача данных 

Производительность можно легко поддерживать, так как если один XMPP-сервер пострадает или выйдет из строя, независимо от причин, пострадают только соответствующие пользователи. Остальные будут продолжать пользоваться бесперебойной связью и передачей данных. Это позволило добиться 100-процентной непрерывности работы. 

Передача данных с сервера на сервер

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

Совместимость

Одним из главных преимуществ XMPP на стороне клиента является обилие клиентов. Не существует недостатка в клиентах XMPP. Независимо от типа устройства вы найдете XMPP-клиент. Для систем Windows и Unix он предлагает командную строку. Кроме того, один пользователь может быть зарегистрирован на разных устройствах, что повышает доступность. 

Кратко

XMPP (Extensible Messaging & Presence Protocol - расширяемый протокол обмена сообщениями и присутствия) имеет огромное значение для создания приложений, умеющих общаться в режиме реального времени. Прочитайте статью и узнайте другие подробности об этом оригинальном протоколе. Мы постарались осветить его во всех подробностях.

Ссылка
скопирована
Получите бесплатные уроки на наших курсах
Все курсы
DevOps
Скидка 25%
DevOps-инженер с нуля
Научитесь использовать инструменты и методы DevOps для автоматизации тестирования, сборки и развертывания кода, управления инфраструктурой и ускорения процесса доставки продуктов в продакшн. Станьте желанным специалистом в IT-индустрии и претендуйте на работу с высокой заработной платой.
Получи бесплатный
вводный урок!
Пожалуйста, укажите корректный e-mail
отправили вводный урок на твой e-mail!
Получи все материалы в telegram и ускорь обучение!
img
Еще по теме:
img
В начале 2000-х, когда идея мессенджеров только формировалась, расширяемый протокол обмена сообщениями и информацией о присутств
img
Задержка в сети, или сетевая задержка, - это временная задержка при передаче запросов или данных от источника к адресату в сетев
img
Система доменных имен (DNS – Domain Name System) обеспечивает сетевую коммуникацию. DNS может показаться какой-то невидимой сило
img
Wi-Fi это технология, которая использует радиоволны для отправки и получения сигналов от находящихся поблизости устройств, чтобы
img
BGP (Border Gateway Protocol) - это протокол граничного шлюза, предназначенный для обмена информацией о маршрутизации и доступно
img
Когда читаете данную статью, браузер подключается к провайдеру (или ISP) а пакеты, отправленные с компьютера, находят путь до се
21 ноября
20:00
Бесплатный вебинар
Введение в Docker