3

我对 XMPP 很陌生,最近决定尝试在移动平台上制作 IM。关于 XMPP,我有几个问题,在最近的阅读之后我似乎无法找到答案(我正在考虑使用 ejabberd 或 Tigase 作为服务器,所以以下问题将假设服务器端是其中之一):

  1. 我在 XMPP 中读到过,将另一个用户添加到名册中是由客户端向服务器发送名册设置请求完成的,然后服务器将添加一个订阅状态为“来自”和“到”的名册项目到请求客户端和分别添加的客户端。如果要让花名册项目的订阅值变为“两者”,则被添加的用户需要接受发送的请求。这个对吗?

  2. 据我了解,一个用户在 XMPP 中通过 JID 识别并添加另一个用户,如果我把它放到 WhatsApp 的案例中,它就是用户的电话号码。这个对吗?

  3. 是否可以让服务器自定义客户端的名册?例如,服务器将处理所有使用 IM 的客户端,并根据某种逻辑返回一个名册,例如他们可能认识的人,而不仅仅是用户添加的联系人?为了更清楚地说明这一点,它就像你可能认识的 Facebook 的人。因此,在这种情况下,每次客户端登录并请求名册时,服务器都会返回用户可能会发现他们想与之交谈的人员列表。

  4. 从之前的理解来看,如果A发送了添加B的请求,B还没有接受,有没有可能一个用户A可以看到另一个用户B是否在线呢?在 B 接受请求之前向 B 发送任何消息怎么样?

谢谢你的帮助!

4

1 回答 1

4

我在 XMPP 中读到过,将另一个用户添加到名册中是由客户端向服务器发送名册设置请求完成的,然后服务器将添加一个订阅状态为“来自”和“到”的名册项目到请求客户端和分别添加的客户端。如果要让花名册项目的订阅值变为“两者”,则被添加的用户需要接受发送的请求。这个对吗?

有两个位。一个是添加到名册中,另一个是订阅状态。状态订阅是通过发送状态订阅请求来建立的(这样做,联系人将自动添加到名册中)。另一方面,花名册集会操纵您的花名册,但不会引起在线订阅。

据我了解,一个用户在 XMPP 中通过 JID 识别并添加另一个用户,如果我把它放到 WhatsApp 的案例中,它就是用户的电话号码。这个对吗?

对于 XMPP 案例,是的,寻址是使用 JID 完成的。我不知道 Whatsapp 的寻址是如何工作的。

是否可以让服务器自定义客户端的名册?例如,服务器将处理所有使用 IM 的客户端,并根据某种逻辑返回一个名册,例如他们可能认识的人,而不仅仅是用户添加的联系人?为了更清楚地说明这一点,它就像你可能认识的 Facebook 的人。因此,在这种情况下,每次客户端登录并请求名册时,服务器都会返回用户可能会发现他们想与之交谈的人员列表。

在封闭环境中进行服务器定制是可能的。它在公共网络上不起作用,因为状态订阅是双向的,你最终会得到一个你在他们在线时看不到的人的名册。另一方面,您可以轻松设置返回建议的用户搜索服务,客户端可以随意添加它们。

从之前的理解来看,如果A发送了添加B的请求,B还没有接受,有没有可能一个用户A可以看到另一个用户B是否在线呢?在 B 接受请求之前向 B 发送任何消息怎么样?

只有在 B 接受 A 的出席信息订阅后,A 才能查看 B 是否在线。在标准 XMPP 中,您不需要在线订阅来发送消息(尽管某些部署可能会改变这一点,例如 Google 的)。

有关这些类型问题的概述,我建议阅读XMPP The Definitive Guide (O'Reilly)(免责声明,我是作者之一),或相关的 RFC(6120、6121、6122)和 XEP 系列(当然,我认为这本书更容易获得)。

于 2014-10-03T09:22:20.603 回答