0

私は XMPP pubsub を使用しています。すべて正常に動作しています。ユーザーはノードを作成でき、関心のあるユーザーはそのノードをサブスクライブできます。しかし、公開アクションを DB に保存したいと考えています。私のアプリケーションでは、チャット、フィードなどの多くのことが pubsub によって処理されるためです。ページの更新時にチャットを維持したいので、舞台裏でDBに保存するopenfireプラグインを探しています。MUC(マルチユーザーチャット)の場合、openfireがチャットを保存するように、手動でajaxリクエストを送信したくありません。公開アイテムをログに記録する方法はありますか。

アップデート:

フォームの構成に問題があり、デフォルトで項目の永続化が false に設定されていました。そのため、提案どおりにノードを構成しました。しかし、ページの更新で問題が発生しました。例を挙げて説明します。私のアプリケーションでは、ユーザー A がログインしてノードを作成し、作成が成功するとユーザー B に要求を送信します。ユーザー B は、ユーザー A によって作成されたノードにサブスクライブします。ユーザーがページを更新すると、タイプ get の IQ スタンザを送信します。上記のような見逃したイベントをすべて取得しますが、エラー 400 subid-required が発生します。

<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>

だから、私が間違っているところを助けることができます。 node がサブスクリプション ID を指定していない場合、サービスはサブスクライバーにエラーを返す必要があります。つまり、同じノードに再度サブスクライブしていることを意味しますか? それが事実かどうかを確認しましたが、購読は1回だけです。そのため、どこが間違っているのかを把握しています.

4

1 に答える 1

1

XMPP の XEP-0060 によると、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

これで問題は解決しますか?

于 2010-09-30T22:13:36.407 に答える