Проекты

XMPP. Открытый протокол обмена сообщениями

протокол xmpp
Written by bitmet

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

Первоначально протокол Extensible Messaging and Presence Protocol был разработан сообществом открытого исходного кода Jabber, чтобы предоставить открытую децентрализованную альтернативу закрытым службам обмена мгновенными сообщениями в то время.

Данный протокол предлагает несколько ключевых преимуществ:

  • Открытый — протоколы XMPP бесплатны, открыты, общедоступны и легко понятны; кроме того, существует несколько реализаций в виде клиентов, серверов, серверных компонентов и библиотек кода.
  • Стандарт — Инженерная группа Интернета (IETF) формализовала основные протоколы потоковой передачи XML как утвержденную технологию мгновенного обмена сообщениями и присутствия. Спецификации протокола были опубликованы как RFC 3920 и RFC 3921 в 2004 году, и Фонд стандартов XMPP продолжает публиковать многие протоколы расширения XMPP . В 2011 году основные RFC были пересмотрены, в результате чего были представлены самые современные спецификации ( RFC 6120 , RFC 6121 и RFC 7622 ).
  • Доказано — первые технологии Jabber / XMPP были разработаны Джереми Миллером в 1998 году и сейчас достаточно стабильны; сотни разработчиков работают над этими технологиями, сегодня в Интернете работают десятки тысяч серверов XMPP, миллионы людей используют XMPP для обмена мгновенными сообщениями через общедоступные службы, такие как Google Talk и развертывают его в организациях по всему миру.
  • Децентрализованный — архитектура сети XMPP похожа на электронную почту; в результате любой может запустить свой собственный сервер XMPP, позволяя отдельным лицам и организациям контролировать свои коммуникационные возможности.
  • Безопасность — любой сервер XMPP может быть изолирован от общедоступной сети (например, в интрасети компании), а надежная безопасность с использованием SASL и TLS была встроена в основные спецификации этого протокола . Кроме того, сообщество разработчиков протокола активно работает над сквозным шифрованием, чтобы еще больше поднять планку безопасности.
  • Расширяемость — используя возможности XML, любой может создавать собственные функции на основе основных протоколов; для обеспечения взаимодействия общие расширения публикуются в серии XEP , но такая публикация не требуется, и организации могут поддерживать свои собственные частные расширения, если это необходимо.
  • Гибкость — приложения XMPP помимо IM включают управление сетью, распространение контента, инструменты для совместной работы, совместное использование файлов, игры, мониторинг удаленных систем, веб-службы, легкое промежуточное ПО, облачные вычисления и многое другое.
  • Разнообразие — широкий спектр компаний и проектов с открытым исходным кодом используют Extensible Messaging and Presence Protocol для создания и развертывания приложений и сервисов в реальном времени; вы никогда не будете «заблокированы» при использовании технологий данного протокола.

Ключевые технологии XMPP:

  • Core — информация об основных технологиях XMPP для потоковой передачи XML.
  • Jingle — SIP-совместимая мультимедийная сигнализация для голоса, видео, передачи файлов и других приложений
  • Многопользовательский чат — гибкое многостороннее общение
  • PubSub — оповещения и уведомления о синдикации данных, расширенном присутствии и многом другом
  • BOSH — HTTP-привязка для XMPP (и другого) трафика

Core

По своей сути XMPP — это технология потоковой передачи XML по сети. Протокол, появившийся в сообществе Jabber с открытым исходным кодом в 1999 году, изначально был разработан, чтобы предоставить открытую, безопасную, децентрализованную альтернативу ориентированным на потребителя службам мгновенного обмена сообщениями (IM), таким как ICQ, AIM и MSN. Основные технологии были формализованы под названием Extensible Messaging and Presence Protocol (XMPP) на IETF в 2004 году.

Эти основные технологии включают:

  • Базовый уровень потоковой передачи XML
  • Шифрование канала с использованием Transport Layer Security (TLS)
  • Надежная проверка подлинности с использованием уровня простой проверки подлинности и безопасности (SASL)
  • Использование UTF-8 для полной поддержки Unicode, включая полностью интернационализированные адреса
  • Встроенная информация о доступности сети («присутствие»)
  • Подписки присутствия для двусторонней авторизации
  • Списки контактов с функцией присутствия («списки»)

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

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

  • RFC 6120: ядро ​​XMPP
  • RFC 6121: XMPP IM
  • RFC 7622: формат адреса XMPP

Первые RFC XMPP ( RFC 3920 и RFC 3921 ) были созданы рабочей группой XMPP IETF в октябре 2004 г. В 2011 г. они были пересмотрены, в результате чего были приняты текущие спецификации.

Реализации

Существует множество реализаций основных спецификаций XMPP.

  • Клиент Extensible Messaging and Presence Protocol — это любое программное обеспечение или приложение, которое позволяет вам подключаться к XMPP для обмена мгновенными сообщениями с другими людьми через Интернет. Для этого можно использовать множество бесплатных клиентов для самых разных устройств и операционных систем.
  • Сервер XMPP обеспечивает основные функции обмена сообщениями, присутствия и маршрутизации XML. На этой странице указано программное обеспечение сервера Jabber / XMPP, которое можно использовать для запуска собственной службы XMPP через Интернет или в локальной сети.
  • Библиотеки кода доступны для многих различных языков программирования, что позволяет разработчикам создавать широкий спектр приложений с поддержкой XMPP.

Джингл (Jingle)

По сути, Jingle предоставляет клиентам Jabber возможность устанавливать, управлять и отключать мультимедийные сеансы. Такие сеансы могут поддерживать широкий спектр типов приложений (например, голосовой чат, видеочат и передачу файлов) и использовать широкий спектр методов передачи мультимедиа (таких как TCP, UDP, RTP или даже внутриполосный XMPP).

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

Jingle предоставляет подключаемую структуру как для типов приложений, так и для транспорта мультимедиа; в случае голосового и видеочата согласование Jingle обычно приводит к использованию транспортного протокола в реальном времени (RTP) в качестве транспорта мультимедиа и, таким образом, совместимо с существующими мультимедийными технологиями, такими как протокол инициации сеанса (SIP).

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

Джингл определяется рядом спецификаций:

  • XEP-0166: Джингл
  • XEP-0167: Jingle RTP-сессии
  • XEP-0176: Транспортный метод Jingle ICE-UDP
  • XEP-0177: Метод передачи Jingle Raw UDP
  • XEP-0181: Jingle DTMF
  • XEP-0234: передача файлов Jingle

Клиенты

  • Coccinella
  • Gajim
  • Jitsi (formerly named SIP Communicator)
  • Movim
  • Pandion
  • Pidgin (formerly named Gaim)
  • Psi
  • Telepathy
  • Yate

Библиотеки

libjingle (C/C++)
Smack (Java)
Telepathy Gabble (C)
yjingle (C++)

Диспетчеры вызовов / серверы VoIP

  • Asterisk
  • FreeSWITCH
  • Yate

Многопользовательский чат (MUC)

MUC — это расширение XMPP для многостороннего обмена информацией, аналогичное Internet Relay Chat (IRC), посредством которого несколько пользователей могут обмениваться сообщениями в контексте комнаты или канала.

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

Поскольку комнаты MUC основаны на XMPP, их можно использовать для обмена не только текстовыми телами сообщений, но и широким спектром полезных данных XML.

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

MUC определен в одной основной спецификации (XEP-0045) и нескольких дополнительных спецификациях:

  • XEP-0045: Многопользовательский чат
  • XEP-0249: Прямые приглашения MUC
  • XEP-0272: Многосторонний джингл

Реализации

Серверы — следующие серверы XMPP включают встроенную поддержку MUC:

  • ejabberd
  • Jabber XCP
  • M-Link
  • MongooseIM
  • Openfire
  • Prosody
  • Tigase

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

  • mu-conference
  • palaver

Клиенты

  • Adium
  • Gajim
  • JWChat
  • mcabber
  • Movim
  • Pidgin
  • Psi

Библиотеки

  • AnyEvent: XMPP (Perl)
  • gloox (C ++)
  • jabber-net (.Net)
  • libpurple (C)
  • Smack (Java)
  • XMPP4R (Рубин)

PubSub

PubSub — это расширение протокола для общих функций публикации-подписки, указанное в XEP-0060. Протокол позволяет объектам XMPP создавать узлы (темы) в службе pubsub и публиковать информацию на этих узлах; уведомление о событии (с полезной нагрузкой или без) затем транслируется всем объектам, которые подписались на узел.

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

Протокол персональных событий (PEP), указанный в XEP-0163, обеспечивает профиль PubSub с учетом присутствия, который позволяет каждому пользователю JabberID функционировать как виртуальная служба pubsub для расширенного присутствия, микроблогов и т.д.

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

PubSub определяется в нескольких спецификациях:

  • XEP-0060: публикация-подписка
  • XEP-0163: протокол личного троеборья
  • XEP-0248: Узлы PubSub

Полезные нагрузки

PubSub и PEP не зависят от полезной нагрузки — вы можете использовать их как нейтральные транспорты для самых разных форматов данных. Некоторые из наиболее популярных полезных нагрузок перечислены ниже, особенно для расширенного присутствия, связанного с пользователями IM:

  • Activities
  • Atom / RSS Notifications
  • Avatars
  • Chatroom Visits
  • Gaming Activities
  • Geolocation
  • Moods
  • Music Tunes
  • TV/Video Activities
  • Website Visits

Реализации

Серверы — следующие серверы XMPP включают встроенную поддержку PubSub или PEP:

  • ejabberd
  • Jabber XCP
  • M-Link
  • Openfire
  • Tigase

Компоненты сервера

  • Idavoll

Клиенты

  • Gajim
  • Movim
  • Psi

Библиотеки

  • strophe (C or JavaScript)
  • XMPP4R (Ruby)

BOSH

BOSH — это «Двунаправленные потоки по синхронному HTTP», технология двусторонней связи по протоколу передачи гипертекста (HTTP). BOSH эмулирует многие транспортные потоки, знакомые по протоколу управления передачей (TCP).

Для приложений, требующих как «push», так и «pull» связи, BOSH значительно более эффективен в отношении полосы пропускания и более отзывчив, чем большинство других двунаправленных транспортных протоколов на основе HTTP и методов, известных как AJAX.

BOSH достигает этой эффективности и низкой задержки, избегая HTTP-опроса, но при этом не прибегая к фрагментированным HTTP-ответам, как это делается в технике, известной как Comet.

На сегодняшний день BOSH используется в основном как транспорт для трафика, которым обмениваются клиенты и серверы Jabber / XMPP (например, для облегчения соединений от веб-клиентов и мобильных клиентов в прерывистых сетях).

BOSH не привязан исключительно к XMPP и может использоваться также для других видов трафика.

Технические характеристики BOSH определяется двумя техническими условиями:

  • XEP-0124: двунаправленные потоки через синхронный HTTP
  • XEP-0206: XMPP через BOSH

Реализации

Серверы Следующие XMPP-серверы включают встроенную поддержку BOSH:

  • ejabberd
  • Jabber XCP
  • M-Link
  • MongooseIM
  • Openfire
  • Prosody
  • Tigase

Менеджеры подключений

Следующие автономные диспетчеры соединений Extensible Messaging and Presence Protocol могут использоваться с широким спектром серверов XMPP:

  • JabberHTTPBind
  • Punjab
  • node-xmpp-bosh
  • rhb

Клиенты

  • Adium
  • Gajim
  • JWChat
  • Pidgin
  • Soashable
  • SparkWeb
  • Swift
  • Tigase Messenger
  • Tigase Minichat

Библиотеки

  • emite (gwt)
  • gloox (C++)
  • JSJaC (JavaScript)
  • strophe (C or JavaScript)
  • Swiften (C++)
  • XIFF (Flash)
  • XMPP4GWT (gwt)

Обзор данного протокола является переводом страницы An Overview of XMPP. Анонимный, децентрализованный, безопасный, и легко масштабируемый протокол доказал свою жизнеспособность, по этому мы продолжим знакомить вас с описаниями сервисов на основе протокола Extensible Messaging and Presence Protocol .

About the author

bitmet

Leave a Comment