[Из песочницы] Релиз XMPP (Jabber) сервера Prosody 0.11.0

Представлен первый релиз 0.11-ой стабильной ветки XMPP сервера Prosody с исправлениями более чем 2000 ошибок.

Основные изменения

Наиболее значительные улучшения коснулись модулей MUC и pubsub.

Вместе эти компоненты реализуют два из самых обширных расширений XEP стандарта XMPP, которые в настоящее время предоставляет протокол. Хотя предыдущие версии уже довольно давно поддерживали MUC и pubsub, оба они довольно сложны, и после первоначальной реализации стало понятно, что необходимо провести обновление и рефакторинг кода, чтобы увеличить покрытие требуемой XEP функциональности, улучшить структуру кода и масштабируемость решений.

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


Улучшения в работе чата

Наибольшая часть изменений в этом выпуске коснулась переписывания практически всего когда, касающегося MUC (Multi-User Conference). Этот амбициозный проект был начат несколько лет назад пользователем daurnimator, который разработал большую часть нового кода.

Хотя наиболее значимые изменения являются внутренними, это позволило проекту более легко добавлять новые функции и улучшать масштабируемость MUC-сервисов (эта версия модуля MUC позволяет работать многим сервисам с сотнями тысяч общих бесед, как например, Jitsi Meet).


Улучшенное конфигурирование

Форма конфигурации сервера была обновлена, обеспечивая более аккуратную компоновку и более удобные наименования параметров.
Диалоговое окно конфигурации общей беседы.


Архивирование сообщений

Была добавлена поддержка архивирования и подгрузки ранее написанных сообщений в MUC (Multi User Chat) с использованием протокола XEP-0313 (MAM). Это позволяет клиенту отображать сообщения, например, которые были написаны в общей беседе, когда пользователь отсутствовал онлайн.


Резервирование имени пользователя

Чтобы предотвратить путаницу, Prosody теперь может применять резервирование имён пользователей. Это предотвращает использование чужого имени, когда настоящий владелец не находятся в общей беседе. По умолчанию только владельцы / администраторы общих чатов могут осуществлять пере/назначение имени (при внесении пользователя в общую беседу), но модуль также может быть настроен так, чтобы пользователи могли регистрировать свои собственные псевдонимы и становиться участниками.


Протокол Pubsub

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

Также была внедрена поддержка конфигурирования, узлов и управления принадлежностью, необходимых для расширенного контроля доступа, и, наконец, поддержку печально известных «publish-options», что позволяет клиентам безопасно публиковать элементы с возможностью надлежащего управления доступом.


PEP

Старый код PEP представляет собой отдельную ограниченную реализацию pubsub, которая реализовала все, что было нужно пользователями в 2009-ом году. Однако за эти годы все больше и больше функций pubsub были востребованы в PEP, благодаря своей большой востребованности. Поэтому стало очевидно, что в PEP необходимо добавить все функции pubsub и использовать уже имеющийся код.

Florian Zeitz начал эту работу, создав новый модуль «mod_pep_plus». Этот модуль теперь заменил исходный «mod_pep» и уже является реализацией PEP по умолчанию.

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


Новый формат vCard

Этот выпуск обеспечивает поддержку новой версии в спецификации vCard, описанной в XEP-0292, которая включает поддержку различных новых функций.

Новый формат также хранится в PEP, обеспечивая полный доступ к управлению доступом (например, можно выбирать, открыт ли ваш vCard или доступен только для контактов).

Немногие (если есть) клиенты в настоящее время поддерживают vCard4, но старый протокол vcard-temp по-прежнему поддерживается с помощью mod_vcard_legacy, который прозрачно преобразуется в новый формат, пока клиенты не обновятся.


Оптимизация работы мобильного аккумулятора

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

Клиенты, поддерживающие XEP-0352, такие как «Conversations», могут информировать сервер, когда приложение находится в фоновом режиме, и Prosody оптимизирует трафик соединения соответствующим образом.

Данная функция реализованп в модуле mod_csi_simple.


Внутренние изменения


Асинхронные API

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

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


Автоматизированные тесты

Одним из крупнейших улучшений в проекте в последнее время стало увеличение числа автоматических тестов. Предыдущие выпуски были почти полностью протестированы вручную, при этом было доступно очень мало автоматических тестов. Теперь же есть большой набор тестов, запускаемых после каждого изменения.


Встроенная поддержка epoll

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

Источник

© Habrahabr.ru