XMPP/Jabber
eXchenge Messages and Presence Protocol
About
Открытый, основанный на XML, свободный для использования протокол для мгновенного обмена сообщениями и информацией о присутствии в режиме, близком к режиму реального времени. Изначально спроектированный легко расширяемым, протокол, помимо передачи текстовых сообщений, поддерживает передачу голоса, видеи и файлов по сети.
Порт: 5222 (но может быть настроен и через 80/443)
Спецификация: https://xmpp.org/
Протокол
XMPP не требует ответа
XMPP может выступать транспортом для других протоколов, а так же сам работает поверх протоколов Bosh или WebSocket (использует их как транспорт). Bosh - передает сообщения через http.
XEP - XMPP extension protocols
Оф документация по всем расширениям: https://xmpp.org/extensions/
Одними из наиболее важных для работы XMPP клиентов являются расширения:
XEP-0163 Personal Eventing Protocol. Размещение аватарок, передача ключей OMEMO
XEP-0191 Блокирование контактов. Чёрный список собеседников
XEP-0198 Менеджер потоков. Необходим для доставки сообщений при нестабильном интернет-канале и выключенном архиве сообщений. Если сервер не получает уведомление о доставке, сервер повторно отправляет сообщение
XEP-0237 Версии ростера. Вместо полной загрузки данных собеседников, передаются лишь обновлённые данные
XEP-0280 Дублирование сообщений. Отправка сообщения на все включённые устройства. Используется, если не включён архив сообщений
XEP-0352 Состояние клиента. Если XMPP клиент свернут, сервер передаёт лишь сообщения. Это экономит расход батареи и интернет-трафик
XEP-0363 HTTP File Upload. Универсальная передача файлов между разными клиентами (через HTTP)
XEP-0384 OMEMO расширение, внедряющее сквозного шифрования Oml, реализацию шифрования из Signal
Еще есть расширения
XMPP over BOSH - XEP-0206 и XEP-124
XMPP over WebSockets - RFC 7395
Jingle - протокол передачи audio и video через XMPP - XEP-166
COLIBRRI - COnferences with LIghtweight BRIdging - XEP-0340 - спецификация работы с конференциями. Разработана Jitsi.
JID
Каждый пользователь в сети Jabber имеет уникальный идентификатор — Jabber ID (сокращённо JID). Адрес JID, подобно адресу электронной почты, содержит имя пользователя и доменное имя сервера, на котором зарегистрирован пользователь, разделенные знаком @. Например, пользователь user, зарегистрированный на сервере example.com, будет иметь адрес: user@example.com.
Пользователь может иметь одновременно несколько подключений, для различия которых используется дополнительный атрибут JID, называемый ресурсом и добавляемый через слэш в конец адреса. К примеру, пусть полный адрес пользователя будет user@example.com/work, тогда сообщения, посланные на адрес user@example.com, дойдут на указанный адрес вне зависимости от имени ресурса, но сообщения для user@example.com/work дойдут на указанный адрес только при соответствующем подключённом ресурсе.
Адреса JID могут также использоваться без явного указания имени пользователя (с указанием имени ресурса или без такового) для системных сообщений и для контроля специальных возможностей на сервере.
Stanza
станса - называют ноды XML сущностей, например: iq-станса: <iq some-attr="test" />
Распространенные cтансы в XMPP и их назначение
open
open - открытие соединения
iq
identifier query - это геттеры/сеттеры для параметров. Своего рода POST-запросы.
message
Отправка сообщений, что логично
presence
Отправка событий. Их отправлять может как сервер, так и клиент. Ответа не требуется.
Last updated