Как хранить полезные нагрузки pubsub в БД - PullRequest
0 голосов
/ 30 сентября 2010

Я использую XMPP pubsub. Все работает нормально. Пользователь может создать узел, и заинтересованный пользователь может подписаться на этот узел. Но я хочу сохранить действие публикации в DB. Потому что в моем приложении многие вещи обрабатываются pubsub, например, чатом., каналы и т.д., так что при обновлении страницы я хочу сохранить чат. Так что я ищу любой плагин openfire, который сохраняет его в БД за кулисами.Как openfire сохраняет чат в случае MUC (многопользовательский чат). Я не хочу вручную отправлять ajax-запрос.Поэтому есть ли способ зарегистрировать элементы публикации.

Обновление:

В моей конфигурации формы возникла проблема, из-за которой для постоянных элементов было установлено значение false по умолчанию. Поэтому я настроил узел какВы предложили. Но снова я столкнулся с некоторой проблемой при обновлении страницы. Я объясню вам на примере.В моем приложении пользователь A входит в систему и создает узел, и при успешном создании он отправляет запрос пользователю B, теперь пользователь B подписывается на узел, созданный пользователем A. Теперь, если какой-либо пользователь обновляет страницу, я отправляю раздел IQ типа getчтобы получить все пропущенные события, как те, что вы упомянули выше. Но я получаю subid-required ошибки 400.

<body rid='430432056' xmlns='http://jabber.org/protocol/httpbind' sid='dca8aafc'><iq to='pubsub.abc' type='get' xmlns='jabber:client' id='3408:sendIQ'><pubsub xmlns='http://jabber.org/protocol/pubsub'><items node='3821poU5zq7nhn1'/></pubsub></iq></body>

В ответ я получаю:

  <body xmlns='http://jabber.org/protocol/httpbind'><iq type="error" id="3408:sendIQ" from="pubsub.abc" to="test@abc/dca8aafc"><pubsub xmlns="http://jabber.org/protocol/pubsub"><items node="3821poU5zq7nhn1"/></pubsub><error code="400" type="modify"><bad-request xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/><subid-required xmlns="http://jabber.org/protocol/pubsub#errors"/></error></iq></body>

Так может помочьмне, где я ошибаюсь. Также я читаю ссылку http://xmpp.org/extensions/xep-0060.html#owner-configure точка: 6.5.9.1, которая говорит, что если запрашивающий объект имеет несколько подписок на узел, но не указывает идентификатор подписки, служба ДОЛЖНА вернуть ошибкуподписчик. Значит ли это, что я снова подписываюсь на тот же узел?Я проверил, так ли это, но я подписываюсь только один раз. Так что просто выясняю, где что-то не так.

1 Ответ

1 голос
/ 01 октября 2010

В соответствии с XEPP-0060 XMPP Владелец узла PubSub может сделать так, чтобы срок действия элементов на узле истек в очень отдаленном будущем.

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

<field var='pubsub#persist_items' type='boolean' label='Persist items to storage'>
  <value>1</value>
</field>
<field var='pubsub#max_items' type='text-single' label='Max # of items to persist'>
  <value>999999</value>
</field>
<field var='pubsub#item_expire' type='text-single' label='Time after which to automatically purge items'>
  <value>999999999999</value>
</field>

Источник: http://xmpp.org/extensions/xep-0060.html#owner-configure

Затем, когда вы хотите получить все элементы, вы, вероятно, можете сделать это для получения данных:

<iq type='get'
    from='francisco@denmark.lit/barracks'
    to='pubsub.shakespeare.lit'
    id='items1'>
  <pubsub xmlns='http://jabber.org/protocol/pubsub'>
    <items node='princely_musings'/>
  </pubsub>
</iq>

Источник: http://xmpp.org/extensions/xep-0060.html#subscriber-retrieve-requestall

Это решит вашу проблему?

...