XMPP根据基于位置的标准发送消息

XMPP根据基于位置的标准发送消息,xmpp,postgis,publish-subscribe,ejabberd,Xmpp,Postgis,Publish Subscribe,Ejabberd,我正在使用XMPP协议、ejabberd服务器和PostGis空间数据库编写一个定制服务。此外,我正在将客户机写入服务,因此我拥有完全的控制权 用户Alice联机时,需要将信息发布到靠近她的某些用户实体。 所以用户Alice登录创建pubsub节点,我希望其他邻近实体自动订阅Alice的节点 当Alice上线时,我需要自动向postgis查询附近的实体,并自动向Alice订阅这些实体 你推荐哪条路 谢谢 Eylon没有现成的标准来精确实现这一点,但是XEP-0060可以扩展以实现这一点 在我开发

我正在使用XMPP协议、ejabberd服务器和PostGis空间数据库编写一个定制服务。此外,我正在将客户机写入服务,因此我拥有完全的控制权

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

当Alice上线时,我需要自动向postgis查询附近的实体,并自动向Alice订阅这些实体

你推荐哪条路

谢谢
Eylon没有现成的标准来精确实现这一点,但是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>

http://jabber.org/protocol/pubsub#subscribe_options
52.231
-1.49
10
然后我定制了pubsub服务,根据订阅选项中的区域过滤通知。只有当项目移动到某个位置时,事情才会变得复杂,并且当以前发布到客户端的项目超出其订阅区域的范围时,您需要模拟收回


不幸的是,我不能提供任何代码,因为它不是公共的(不是我的选择),尽管它是用于韵律的,而且看起来您正在寻找ejabberd解决方案。不过,我上面描述的原理对我来说很好,所以我建议至少将其作为模板解决方案。

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

感谢您的回复!我有点困惑。您编写的iq节是加入节点的请求。在我的例子中,Alice将是节点创建者,订阅的实体将是她周围的实体。所有这些都必须在没有最终用户干预的情况下实现。也许你的意思是Alice的客户端将创建一个point+radius节点,在服务器端,我将拦截节点创建并自动订阅所有附近的实体。当然,这将涉及到在我的XMPP服务器中进行空间数据库查询。啊,好吧,你的案例和我的有点不同。这听起来像是需要节点具有位置,而不是项目具有位置(如我的示例中所示)。订阅者可以自动订阅距当前点一定距离内的节点。正确吗?多个节点有点困难-您可以自动向用户订阅新节点,但客户端实际上不会知道它已订阅。在这一点上,您也可以发送未经请求的通知@罗宾