2011-01-05 2 views
4

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

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

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

This OpenFire forum post предполагает, что поведение я испытываю это желаемые один ...

Спасибо за все указатели, Флориана

+1

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

+0

Ваше решение очень помогло мне. Спасибо. –

ответ

0

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

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

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

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

1

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

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