XMPP — объяснение подписки на реестр

Предположим, у меня есть 2 пользователя Алиса и Боб на моем сервере Jabber. Чтобы добавить в составы с подпиской как both, мне нужно сделать следующие шаги:

  1. Алиса отправляет запрос на подписку Бобу.

  2. Когда Боб получает запрос, он утверждает его.

  3. Бобу также может быть интересно присутствие Алисы, поэтому он подписывается на нее.

  4. И Алисе нужно одобрить запрос Боба.

НО

Теперь рассмотрим, Боба не было на сервере, т.е. он незарегистрирован и Алиса пытается добавить его в свой ростер.

Ниже приведены шаги, которые будут иметь место:

  1. Алиса отправляет запрос на подписку Бобу.

  2. Боб, будучи незарегистрированным, не получил запрос.

  3. Подписка Алиса->Боб установлена ​​как None.

  4. Процесс заканчивается здесь.

Итак, Боб зарегистрировался. Как Алиса узнает, что Боб зарегистрировался и ей нужно снова отправить запрос subscription ИЛИ Как Боб отправит уведомление каждому пользователю, добавившему его в свой список? Какой модуль XEP/Ejabberd справляется с этим?

Мы отладили Whatsapp и узнали, что в этом случае Боб отправляет уведомление всем тем пользователям, которые добавили его в свои ростеры.


person PythonEnthusiast    schedule 27.02.2017    source источник
comment
Вы смогли понять, как действовать здесь? Я провел тот же эксперимент, что и выше, и подписка Алисы на Боба застряла в ожидании, даже после того, как Боб зарегистрировался (а у Боба нет Алисы в его контактах).   -  person Arun Reddy Kandoor    schedule 03.02.2018
comment
Я действительно не помню, как мы этого добились. Позвольте мне вспомнить мои мысли, и я вернусь к вам.   -  person PythonEnthusiast    schedule 07.02.2018


Ответы (1)


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

  1. Рассматриваемый сервер играет ключевую роль в соединении Xmpp клиентов, в такой ситуации, как DNS-серверы в Интернете, играют важную роль в соединении клиентов, поэтому, если Боб не был зарегистрирован в то время, когда Алиса отправила запрос, он мог иметь служба кэширования, которая записывает все услуги межсоединения, и когда он регистрируется, и у него есть служба Xmpp, которая автоматически обнаруживает одноранговые узлы в сети (как я сказал, это будет зависеть от пользователя), но должен быть какой-то тип пользовательских настроек, связанных с процесс открытия; его служба затем извлечет все прошлые запросы из кеша и, в зависимости от временных ограничений, сможет получить запрос Алисы, а затем он сможет ответить. Это больше с философской точки зрения. Но если вы разработчик, то можете написать плагины для всего описанного выше сценария. Если вам нужны дополнительные технические параметры, мы можем обсудить это, например, тип метода обнаружения, который вы хотите написать на сервере Боба, тип механизма кэширования, который вы можете установить в сети Боба, и как подключить его к его серверу Jabber и т. д. , это были только мои собственные два цента. Просто рассмотрите ситуацию, несколько похожую на сборщик пакетов и получение автономных сообщений при входе в систему, но в этом случае он будет охватывать сервер Jabber, а сборщик пакетов будет механизмом службы кэширования, который вы подключаете к своему серверу.

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

person OlaB    schedule 01.03.2017