我是XMPP的新手,最近决定尝试在移动平台上制作IM。关于XMPP我有几个问题,我似乎无法在最近的读数后找到答案(我正在考虑使用ejabberd或Tigase作为服务器,因此以下问题将假设服务器端是其中之一):
我已经在XMPP中看到,将另一个用户添加到名册是由客户端向服务器发送名单集请求,然后服务器将添加一个名为“来自”和“订阅状态”的名单项到'请求客户端和客户端分别添加。另外,为了使名册项目的订阅价值成为“两者”,被添加的用户需要接受发送的请求。这是对的吗?
根据我的理解,一个用户通过JID在XMPP中识别并添加另一个用户,如果我把它放到WhatsApp的情况下,那就是用户的电话号码。这是对的吗?
是否可以使服务器自定义客户端的名单?例如,服务器将使用IM处理所有客户端,并基于某些逻辑返回名单,例如,他们可能互相认识的人,而不仅仅是用户添加的联系人?为了更清楚地澄清这一点,它就像你可能知道Facebook的人。因此,在这种情况下,每次客户端登录并请求名单时,服务器都会返回用户可能会发现他们想要与之交谈的人员列表。
根据之前的理解,用户A是否可以看到另一个用户B是否在线,因为A发送了添加B的请求,但B尚未接受?在B接受请求之前如何向B发送任何消息?
感谢您的帮助!
答案 0 :(得分:4)
我已经读过,在XMPP中,将另一个用户添加到名册是由客户端向服务器发送名单集请求,然后服务器将添加一个名为“#”的订阅状态项目。 39;和'到'分别添加到请求客户端和客户端。另外,为了使名册项目的订阅价值成为“两者”,被添加的用户需要接受发送的请求。这是对的吗?
有两位。一个是添加到名册,另一个是获得在线订阅。通过发送在线订阅请求来建立在线订阅(并且在此过程中,联系将被自动添加到名单中)。另一方面,名单集会操纵你的名单,但不会导致在线订阅。
根据我的理解,一个用户通过JID在XMPP中识别并添加另一个用户,如果我把它放到WhatsApp的情况下,那就是用户的电话号码。这是对的吗?
对于XMPP案例,是的,使用JID完成寻址。我不知道Whatsapp的解决方式是如何起作用的。
是否可以使服务器自定义客户端的名单?例如,服务器将使用IM处理所有客户端,并基于某些逻辑返回名单,例如,他们可能互相认识的人,而不仅仅是用户添加的联系人?为了更清楚地澄清这一点,它就像你可能知道Facebook的人。因此,在这种情况下,每次客户端登录并请求名单时,服务器都会返回用户可能会发现他们想要与之交谈的人员列表。
在封闭环境中进行服务器自定义是可能的。它不会在公共网络上工作,因为在线订阅是双向的,您最终会得到一个人们无法在线时查看的人员名单。另一方面,您可以轻松设置可返回建议的用户搜索服务,客户可以随意添加。
只有B接受了A的在线订阅后,才能看到B是否在线。在标准XMPP中,您不需要在线订阅来发送消息(尽管某些部署可能会改变这种情况,例如Google会这样做。)根据之前的理解,如果A发送了添加B的请求,但是B尚未接受,则用户A是否可以看到另一个用户B是否在线?在B接受请求之前如何向B发送任何消息?
有关这些类型问题的概述,我建议阅读XMPP The Definitive Guide (O'Reilly)(免责声明,我是其中一位作者)或相关的RFC(6120,6121,6122)和XEP系列(当然,我认为这本书更容易获取)。