XMPP: RFC при установлении взаимной подписки, когда исходный запросчик находится в автономном режиме (наличие подписки) - PullRequest
4 голосов
/ 05 января 2011

у нас есть сервер XMPP (OpenFire) и пользовательский клиент на основе стека Java Smack XMPP.Мы используем принятие подписки вручную, поэтому клиенты должны обмениваться подписками и подписками.

Как отмечено в RFC , подписки присутствуют («Я хочу подписаться на ваши присутствия»)сохраняется сервером и пересылается каждый раз, когда пользователь входит в систему, пока не ответит на них.К сожалению, то же самое, похоже, не относится к ответам («подписан» или «отписан»).Если исходный запросчик отключен, когда другие пользователи отвечают на запрос подписки, он не получает ответ.Я не смог найти в XMPP RFC ничего об ожидаемом поведении сервера.

Что я могу сделать?Есть ли что-то, что я мог пропустить?Или есть стандартный способ реализации этого варианта использования?

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

Спасибодля всех указателей, Florian

Ответы [ 2 ]

1 голос
/ 05 января 2011

В вашем распоряжении два средства для определения состояния подписки:

  1. Проверьте список запрашивающего пользователя.Если список содержит элемент для рассматриваемой сущности с атрибутом подписки «to» или «both», то вы подписаны.
  2. Второй вариант - отправить еще один пакет подписки на сервер;сервер должен немедленно ответить подпиской от имени другого пользователя, если он уже принял запрос присутствия.
0 голосов
/ 05 января 2011

Итак Алиса хочет подписаться на Бобс информацию о присутствии и отправляет запрос на подписку.Сервер будет отправлять уведомления Бобу , пока он не ответит да или нет .И ваша проблема сейчас в том, что сервер не будет уведомлять Алису , если она не в сети, а Bob реагирует на запрос.Так что Алиса получит Бобс ответ случайно.

Если Боб согласится обменяться информацией о присутствии, Алиса получитзаметьте это в своем списке - она ​​увидит присутствие Бобов (далеко, без дела, ...).В противном случае она не узнает, находится ли запрос на рассмотрении или Боб отклонил ее запрос.

Можно изменить это поведение, внедрив и добавив пользовательский модуль в ваш openfire.сервер.Для этого у Openfire есть API.

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

...