有没有办法确定用户加入了哪些多用户会议 (MUCH)?
Posted
技术标签:
【中文标题】有没有办法确定用户加入了哪些多用户会议 (MUCH)?【英文标题】:Is there a way to determine which Mulit User Conferences (MUC) a user has joined? 【发布时间】:2012-01-28 01:07:43 【问题描述】:我想知道是否有一种方法可以查询 XMPP 服务器(通过用户 JID?)以找出该用户当前所在的聊天室?如果没有,我们可以查询 jabber 服务器以获取所有活动聊天室的列表吗?
顺便说一句,我们正在为多用户聊天启用 ejabber。使用 java 库(smack?)的解决方案将是理想的。
【问题讨论】:
您想要您所在的房间列表还是其他用户?两者都没有很好的答案,但第一个在理论上是可能的,第二个是侵犯隐私。 TX,乔。我确实想获得随机用户的聊天室列表(我想提供他的 facebook 朋友目前加入的房间列表)。 我需要第一个,(查找当前用户所在的聊天)。怎么做呢?谢谢。 【参考方案1】:正如 Joe Hildebrand 所提到的,没有这样的标准功能,因为通过 XMPP 允许这样做会侵犯隐私,因此您不能指望 Smack 会这样做。也许有了管理员权限,您可以拥有一个自定义协议扩展来做到这一点,但这似乎有风险。
但是,在服务器级别,您应该能够为 ejabberd 编写一个自定义模块,该模块将查询或索引所有用户所在的房间。这不是标准的,并且涉及插件开发。
【讨论】:
【参考方案2】:有两个(也许三个)XMPP 实体拥有该信息:
提供 MUC 房间的 XMPP MUC 组件 用户 XMPP 客户端(或更好的用户使用的 XMPP 库) 也许 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 组件提供了这个功能,那么如果这个信息被暴露,它就不能被客户端控制。但是如果客户提供了这个功能,那么他当然可以控制谁可以检索这个信息。您可以决定在您的情况下哪种方法更好。
【讨论】:
【参考方案3】:获取所有聊天室没问题,只需use this query。
似乎已经有一个关于如何用 smack 检索房间的问题。 Look here.
【讨论】:
太棒了,德克萨斯州。我将继续寻找为给定用户获取特定房间的方法.. jabber 必须在某处获得此信息..以上是关于有没有办法确定用户加入了哪些多用户会议 (MUCH)?的主要内容,如果未能解决你的问题,请参考以下文章