XMPP名单状态,自定义名单和未知用户之间的消息传递

时间:2014-10-03 03:22:45

标签: xmpp ejabberd instant-messaging tigase

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

  1. 我已经在XMPP中看到,将另一个用户添加到名册是由客户端向服务器发送名单集请求,然后服务器将添加一个名为“来自”和“订阅状态”的名单项到'请求客户端和客户端分别添加。另外,为了使名册项目的订阅价值成为“两者”,被添加的用户需要接受发送的请求。这是对的吗?

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

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

  4. 根据之前的理解,用户A是否可以看到另一个用户B是否在线,因为A发送了添加B的请求,但B尚未接受?在B接受请求之前如何向B发送任何消息?

  5. 感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

  

我已经读过,在XMPP中,将另一个用户添加到名册是由客户端向服务器发送名单集请求,然后服务器将添加一个名为“#”的订阅状态项目。 39;和'到'分别添加到请求客户端和客户端。另外,为了使名册项目的订阅价值成为“两者”,被添加的用户需要接受发送的请求。这是对的吗?

有两位。一个是添加到名册,另一个是获得在线订阅。通过发送在线订阅请求来建立在线订阅(并且在此过程中,联系将被自动添加到名单中)。另一方面,名单集会操纵你的名单,但不会导致在线订阅。

  

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

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

  

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

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

  

根据之前的理解,如果A发送了添加B的请求,但是B尚未接受,则用户A是否可以看到另一个用户B是否在线?在B接受请求之前如何向B发送任何消息?

只有B接受了A的在线订阅后,才能看到B是否在线。在标准XMPP中,您不需要在线订阅来发送消息(尽管某些部署可能会改变这种情况,例如Google会这样做。)

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