我正在使用 XMPP 协议、ejabberd 服务器和 PostGis 空间数据库编写自定义服务。此外,我正在将客户端写入服务,因此我可以完全控制。
用户 Alice 上线并需要向她附近的某些用户实体发布信息。所以用户 Alice 登录创建 pubsub 节点,我希望其他邻近实体自动订阅 Alice 的节点。
当 Alice 上线时,我需要自动查询有关邻近实体的 postgis 并自动将它们订阅给 Alice。
你会推荐哪种方式?
谢谢埃隆
我正在使用 XMPP 协议、ejabberd 服务器和 PostGis 空间数据库编写自定义服务。此外,我正在将客户端写入服务,因此我可以完全控制。
用户 Alice 上线并需要向她附近的某些用户实体发布信息。所以用户 Alice 登录创建 pubsub 节点,我希望其他邻近实体自动订阅 Alice 的节点。
当 Alice 上线时,我需要自动查询有关邻近实体的 postgis 并自动将它们订阅给 Alice。
你会推荐哪种方式?
谢谢埃隆
没有现成的标准可以做到这一点,但可以扩展 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 解决方案。我上面描述的原理对我来说效果很好,所以我建议至少将它作为模板解决方案。
我没有使用过 ejabberd,但我认为在位置跟踪和订阅管理之间进行关联的自定义模块将是最简单的。通过使用 curomt 插件/模块,大多数 XMPP 服务器通常支持这种类型的应用程序特定行为。