我想知道是否有办法查询XMPP服务器(传递用户JID?)以找出该用户当前所在的聊天室?如果没有,我们可以查询jabber服务器以获取所有活动聊天室的列表吗?
顺便说一句,我们正在运行ejabber以启用多用户聊天。使用java库(smack?)的解决方案是理想的。
答案 0 :(得分:3)
正如Joe Hildebrand所提到的,没有这样的标准功能,因为通过XMPP允许这样做是违反隐私的,所以你不能期望从Smack那样做。也许使用管理员权限,您可以使用自定义协议扩展,但这似乎有风险。
但是,在服务器级别,您应该能够为ejabberd编写一个自定义模块,用于查询或索引用户所在的所有房间。这不是标准模块,并且涉及插件开发。
答案 1 :(得分:2)
有两个(可能是三个)XMPP实体拥有该信息:
在撰写本文时,没有标准化的方法(就XMPP XEP而言)来查询该信息。正如Joe Hildebrand指出的那样,这会导致信息泄露,这在大多数情况下都不是我们想要的。
但是您可以扩展MUC组件以提供该信息(记住XMPP可以轻松扩展)或XMPP客户端库。通常的方法是通过iq get查询。例如:
<iq type='get' from='juliet@capulet.lit/balcony' to='capulet.lit' id='q1'>
<query xmlns='http://jabber.org/protocol/muc#joinedrooms'/>
</iq>
支持该查询的实体将报告所请求实体的已连接房间。他们也可以在其服务发现信息中宣布http://jabber.org/protocol/muc#joinedrooms
功能。
请注意,这是一个虚构的协议扩展,例如。我从未在实际使用中看到它
如果MUC组件提供此功能,则如果公开此信息,则客户端无法控制它。但是,如果客户端提供此功能,那么他当然可以控制谁可以检索此信息。您可以决定在您的案例中哪种方法更好。
答案 2 :(得分:0)
获取所有聊天室都没问题,只需use this query。
似乎已经有一个关于如何用smack检索房间的问题。 Look here