XMPP在基于位置的标准上发送消息

时间:2012-05-06 05:19:27

标签: xmpp postgis publish-subscribe ejabberd

我正在使用XMPP协议,ejabberd服务器和PostGis空间数据库编写自定义服务。此外,我正在写客户服务,所以我完全控制。

用户Alice上线,需要将信息发布到她附近的某些用户实体。 所以用户Alice登录创建pubsub节点,我希望其他邻近实体自动订阅Alice的节点。

当Alice上线时,我需要自动查询postgis有关邻近实体的信息并自动订阅Alice。

你会推荐哪种方式?

由于 Eylon

2 个答案:

答案 0 :(得分:0)

没有现成的标准可以做到这一点,但可以扩展XEP-0060来实现这一目标。

在我开发的系统中,我可以在节点内订阅点+半径。这是通过subscription options完成的,例如:

<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解决方案。我上面描述的原则对我来说效果很好,所以我建议至少作为模板解决方案。

答案 1 :(得分:0)

我没有使用ejabberd,但我认为在位置跟踪和订阅管理之间进行关联的自定义模块将是最简单的。大多数XMPP服务器通常使用curomt插件/模块支持此类特定于应用程序的行为。