2012-05-06 9 views
3

XMPPプロトコル、ejabberdサーバ、PostGis空間データベースを使用してカスタムサービスを作成しています。また、私はサービスにクライアントを書いているので、私は完全なコントロールを持っています。ロケーションベースの基準でメッセージを送信するXMPP

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

アリスがオンラインになると、近接内のエンティティに関するpostgisを自動的に照会し、アリスに自動的に登録する必要があります。

どのようにお勧めしますか?

おかげ Eylon

答えて

0

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

私が開発したシステムでは、ノード内のポイント+半径にサブスクライブすることができました。そしてIはサブスクリプション・オプション内の領域に応じて通知をフィルタするためのpubsubサービスをカスタマイズし

<iq type='set' 
    from='[email protected]/barracks' 
    to='pubsub.shakespeare.lit' 
    id='sub1'> 
    <pubsub xmlns='http://jabber.org/protocol/pubsub'> 
    <subscribe node='princely_musings' jid='[email protected]'/> 
    <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> 

:これは、以下のような、subscription optionsを介して達成されます。アイテムが移動する場所が実際に複雑になるだけで、クライアントに以前にパブリッシュされたアイテムがそのサブスクリプションエリアの範囲外になると、引き込みをエミュレートする必要があります。

残念ながら、Prosodyのためのものではありますが、私は選択肢ではないため、コードを公開することはできません。あなたはejabberdソリューションを探しているようです。私が上で説明した原理は私にとってうまくいきますので、私はそれを少なくともテンプレートソリューションとして提案します。

+0

返信いただきありがとうございます!私はちょっと混乱しています。書き込んだiqスタンザは、ノードに参加する要求です。私の場合、アリスはノードの作成者であり、サブスクライブされたエンティティは彼女を囲むエンティティになります。これらは全て、エンドユーザの介入なしに起こらなければならない。だから、あなたはアリスのクライアントがポイント+半径ノードを作成し、サーバー側ではノード作成を傍受し、近くのすべてのエンティティを自動的にサブスクリプションすることを意味します。このオフコースでは、私のXMPPサーバー内で空間データベースのクエリを実行する必要があります。 – user1063503

+0

ああ、あなたのケースは私のものとは少し異なります。場所を持つアイテム(例えば私の例のようなもの)ではなく、場所を持つノード*が必要です。また、加入者が現在のポイントから一定の距離内にあるノードに自動的に加入することができます。正しい? – MattJ

+0

はい。そのとおりです。 – user1063503

0

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

+0

このケースでは、私のXMPPサーバーモジュール内で空間データベースクエリを実行しますか? @ロビン – user1063503

関連する問題