Как сохранить групповую комнату (MUC) существующей постоянно, даже если она отключена от сервера XMPP?

Я разрабатываю модуль мгновенных сообщений (часть веб-приложения J2EE) с использованием openfire/jsjac в рамках протокола XMPP (Jabber).

Управление / таблицы пользователей / групп openfire были перенаправлены в таблицы нашей бизнес-базы данных, что означает, что мне больше не нужно поддерживать пользователей / группы в openfire. все отношения пользователей / групп были установлены в бизнес-базе данных.

Ниже приведено изображение, которое я рисую на главной панели в соответствии с требованиями. из-за своей низкой репутации я не могу опубликовать изображение, поэтому я публикую URL для изображения основного интерфейса моего мгновенного сообщения. Извините за неудобства. основной интерфейс мгновенного сообщения Image

Вы, ребята, видите, что на левой панели нет списка пользователей / групп. Есть сессии, сохраненные в соответствии с историей, что меня озадачивает, особенно в отношении группы. Я прочитал "XEP-0045: Многопользовательский чат" с XMPP.org. Я знаю об общем рабочем процессе о групповом чате: XEP-0045: многопользовательский чат "

  1. Создайте комнату, произведите комнату Джид.
  2. Настройте комнату.
  3. получить usersjid из бизнес-базы данных и привязать (добавить) пользователей к новой созданной комнате.
  4. отправить сообщение в комнату.
  5. Сервис отправит сообщение всем участникам группы.

И знал о том, что есть тип комнаты - это постоянная комната, которая объясняется как " Комната, которая не разрушается, если последний обитатель выходит; антоним: Временная комната ". И в том же документе есть несколько предложений:

Владелец комнаты ДОЛЖЕН иметь возможность уничтожить комнату, особенно если комната постоянная. Рабочий процесс выглядит следующим образом:

  1. Владелец комнаты просит, чтобы комната была уничтожена, при необходимости указав причину и альтернативное место.
  2. Комната удаляет всех пользователей из комнаты (включая соответствующую информацию об альтернативном местоположении и причине удаления) и уничтожает комнату, даже если она была определена как постоянная.

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

  1. что означает "выходы пассажира"? если пользователь выходит из системы (в автономном режиме), означает ли это "существует". И все пользователи находятся в автономном режиме, означает ли это, что "постоянный тип" сделает созданную комнату сохраненной? Так, где информация о комнате сохранена? в openfire или где-то еще?
  2. Предположим, что все обитатели существуют (в автономном режиме), хотя эта созданная комната не была уничтожена, как насчет информации о привязке? Я имею в виду, предположим, что один пользователь получил членство от владельца (администратора), если этот пользователь существует или находится в автономном режиме, постоянная комната сохранит свою роль участника, верно? другими словами, до тех пор, пока комната не будет уничтожена, вся информация о конфигурации и привязке не будет потеряна, верно?
  3. Как насчет ситуации, когда сервер openfire сталкивается с перезапуском, находится ли созданная комната и ее информация все еще там?
  4. как заново найти созданную комнату, если владелец повторно залогинится? через сохранение номера комнаты?

Помимо вышеупомянутого вопроса, я подумал, что рабочий процесс для реализации MUC с постоянной комнатой. Не могли бы вы проверить это и посмотреть, какая проблема существует в потоке?

Мой рабочий процесс для MUC с постоянной комнатой

  1. Владелец отправляет объект присутствия на сервер в созданную комнату, дает JID комнаты и устанавливает идентификатор комнаты.
  2. Владелец отправляет объект IQ на сервер, чтобы сконфигурировать созданную комнату и установить тип комнаты как "постоянный".
  3. Владелец отправляет объект IQ, чтобы предоставить другим пользователям роль членства.(Информация привязки)
  4. Владелец отправляет сообщение Object в ROOM jid, а ROOM jid пересылает все сообщение своим привязанным членам.
  5. Обычные члены этой комнаты обрабатывают сообщение (получают) и получают номер комнаты и идентификатор комнаты (я надеюсь, что все пользователи, включая владельца, могут использовать этот номер комнаты, чтобы повторно найти комнату, когда они переместятся..)

Поэтому независимо от роли, владельца или обычного члена, как переопределить и воссоединиться с созданной комнатой в соответствии с jid или id комнаты с предварительным условием, что тип комнаты является "постоянным"??

3 ответа

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

  2. Я зависит от реализации компонента MUC. Если он хранит постоянные MUC в постоянном хранилище, он может перезагрузить все постоянные MUC при перезапуске. IIRC компонент MUC Openfire делает это.

  3. Сделайте это постоянным.

Вам нужно обновить код Java в openfire, чтобы группы не удалялись, если пользователь переходит в автономный режим. Вам нужно обновить код против MUC в openfire

Я предлагаю вам взглянуть на новую функцию XMPP в MUCLight.

У этого есть многократные функциональные возможности не все, но большинство как WhatsApp и к тому, что вы ожидаете.

Постоянство обрабатывается в этом типе группы MUCLight.

XMPP через сервер MongooseIM: https://mongooseim.readthedocs.io/en/latest/open-extensions/muc_light/

XMPP через сервер Ejabberd: https://www.ejabberd.im/aggregator/categories/2

Другие вопросы по тегам