【问题标题】:XMPP Sending Messages on Location Based CriteriaXMPP 在基于位置的标准上发送消息
【发布时间】:2012-05-15 03:34:05
【问题描述】:

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

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

当 Alice 上线时,我需要自动向 postgis 查询附近的实体,并自动将它们订阅给 Alice。

你会推荐哪种方式?

谢谢 埃隆

【问题讨论】:

    标签: xmpp postgis publish-subscribe ejabberd


    【解决方案1】:

    没有现成的标准可以做到这一点,但可以扩展 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 解决方案。不过,我上面描述的原理对我来说效果很好,所以我建议至少将其作为模板解决方案。

    【讨论】:

    • 感谢您的回复!我有点困惑。您编写的 iq 节是加入节点的请求。在我的情况下,Alice 将是节点创建者,订阅的实体将是她周围的实体。所有这一切都必须在没有最终用户干预的情况下发生。所以也许你的意思是爱丽丝的客户端将创建一个点+半径节点,在服务器端我将拦截节点的创建并自动订阅所有附近的实体。本课程将涉及在我的 XMPP 服务器中进行空间数据库查询。
    • 啊,好吧,你的情况和我的有点不同。听起来您需要 nodes 来拥有位置,而不是具有位置的项目(如我的示例中)。并且订阅者可以自动订阅距当前点一定距离内的节点。对吗?
    • 多个节点有点困难——您可以自动为用户订阅新节点,但客户端实际上并不知道它已被订阅。到时候你也可以直接向它发送不请自来的通知。
    【解决方案2】:

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

    【讨论】:

    • 在这种情况下,我将在我的 XMPP 服务器模块中进行空间数据库查询? @罗宾
    猜你喜欢
    • 2011-05-31
    • 1970-01-01
    • 2013-02-12
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多