XMPP - 名册订阅说明

Posted

技术标签:

【中文标题】XMPP - 名册订阅说明【英文标题】:XMPP - Roster Subscription Explaination 【发布时间】:2017-07-18 01:39:33 【问题描述】:

假设我的 Jabber 服务器上有 2 个用户 Alice 和 Bob。要添加订阅为both 的花名册,我需要执行以下步骤:

    Alice 向 Bob 发送订阅请求。

    当 Bob 收到请求时,他会批准它。

    Bob 可能也对 Alice 的存在感兴趣,所以他订阅了她。

    Alice 需要批准 Bob 的请求。

但是

现在考虑,Bob 不在服务器上,即他未注册,Alice 试图将他添加到她的名册中。

以下是将要执行的步骤:

    Alice 向 Bob 发送订阅请求。

    Bob,未注册,未收到请求。

    Alice->Bob 订阅设置为None

    流程到此结束。

现在,鲍勃自己注册了。 Alice 如何知道 Bob 注册了自己并且她需要再次发送 subscription 请求 Bob 将如何向将他添加到他/她的名册中的每个用户推送通知?哪个 XEP/Ejabberd 模块可以处理这个问题?

我们调试了 Whatsapp 并了解到,在这种情况下,Bob 会向所有将他添加到他们的名单中的用户推送通知。

【问题讨论】:

您知道如何在此处进行吗?我进行了与上述相同的实验,即使在 Bob 注册后,Alice 对 Bob 的订阅仍处于等待“退出”状态(并且 Bob 的联系人中没有 Alice)。 我真的不记得我们是如何实现它的。让我回忆一下我的想法,我会回复你的。 【参考方案1】:

嗯,我的看法更像是,您在设置环境时会考虑多种情​​况,因此您采用哪种类型的配置。以下是我知道可能会发生这种情况的几种方式。

    有问题的服务器在连接Xmpp 客户端方面起着关键作用,在诸如互联网上的 DNS 服务器在互连客户端的情况下发挥着重要作用,所以如果 Bob 当时没有注册 Alice发送了一个请求,他可能有一个记录所有互连服务的缓存服务,当他注册时,他有一个 Xmpp 服务,可以自动发现网络上的对等点(就像我说的那样,这将是用户特定的),但是必须是发现过程中涉及的某种类型的用户设置;然后,他的服务将从缓存中提取所有过去的请求,并根据时间限制检索 Alice 的请求,然后他可以做出响应。这更多是从哲学的角度来看。但是,如果您是开发人员,则可以为上述所有场景编写插件。如果您需要更多技术参数,我们可以讨论一下,例如您想在 Bobs 服务器上编写的发现方法的类型、您可能希望放在 Bobs 网络上的缓存引擎类型以及如何将其插入他的 Jabber 服务器等,这只是我自己的两分钱。只需考虑这种情况有点类似于拥有一个数据包收集器并在您登录时检索离线消息,但在这种情况下,它将包含 Jabber 服务器,而数据包收集器将是您插入服务器的缓存服务引擎。

    如果它是一个 LAN,那么动态检索主机记录和所有互连问题可能会有点困难,但我可以采取的合理解决方案是抢占所有可用联系人,或者更好地仍然在特定的子网中运行。

【讨论】:

以上是关于XMPP - 名册订阅说明的主要内容,如果未能解决你的问题,请参考以下文章

使用 Strophe.js 名册插件和 Ejabberd 接收“订阅”状态

在 Xmpp/Openfire 中从名册中删除一个朋友

XMPP 取消订阅/订阅状态泄露隐私

XMPP名册存在

在登录时检索一个人的名册联系人列表

一次获取多个 JID XMPP