3

XMPP プロトコル、ejabberd サーバー、および PostGis 空間データベースを使用してカスタム サービスを作成しています。また、クライアントをサービスに書き込んでいるので、完全に制御できます。

ユーザー Alice がオンラインになり、彼女の近くにいる特定のユーザー エンティティに情報を公開する必要があります。したがって、ユーザー Alice login は pubsub ノードを作成します。他の近接エンティティが Alice のノードに自動的にサブスクライブされるようにします。

Alice がオンラインになったら、近くにあるエンティティについて postgis に自動的にクエリを実行し、それらを Alice に自動的にサブスクライブする必要があります。

どの方法をお勧めしますか?

ありがとうイーロン

4

2 に答える 2

0

私はejabberdを使用していませんが、位置追跡とサブスクリプション管理の間の相関を行うカスタムモジュールが最も簡単だと思います。このタイプのアプリケーション固有の動作は、通常、curomtプラグイン/モジュールを使用することでほとんどのXMPPサーバーでサポートされます。

于 2012-05-07T17:14:58.100 に答える
0

これを正確に行うための既存の標準はありませんが、XEP-0060 を拡張してこれを達成することができます。

私が開発したシステムでは、ノード内でポイント + 半径をサブスクライブできるようにしました。これは、次のようなサブスクリプション オプションによって実現されます。

<iq type='set'
    from='francisco@denmark.lit/barracks'
    to='pubsub.shakespeare.lit'
    id='sub1'>
  <pubsub xmlns='http://jabber.org/protocol/pubsub'>
    <subscribe node='princely_musings' jid='francisco@denmark.lit'/>
    <options>
      <x xmlns='jabber:x:data' type='submit'>
        <field var='FORM_TYPE' type='hidden'>
          <value>http://jabber.org/protocol/pubsub#subscribe_options</value>
        </field>
        <field var='location#latitude'><value>52.231</value></field>
        <field var='location#longitude'><value>-1.49</value></field>
        <field var='location#radius'><value>10</value></field>
      </x>
    </options>
  </pubsub>
</iq>

次に、pubsub サービスをカスタマイズして、サブスクリプション オプションの領域に応じて通知をフィルター処理しました。アイテムが場所を移動する場合にのみ、事態は非常に複雑になります。また、クライアントに以前に公開されたアイテムがそのサブスクリプション エリアの範囲外に出た場合は、リトラクトをエミュレートする必要があります。

残念ながら、公開されていないため (私の選択ではありません)、コードを提供することはできませんが、とにかく Prosody 用であり、ejabberd ソリューションを探しているようです。ただし、上記の原則は私にとってはうまく機能しているため、少なくともテンプレートソリューションとして提案します.

于 2012-05-07T02:26:41.693 に答える