【问题标题】:Is there a way to determine which Mulit User Conferences (MUC) a user has joined?有没有办法确定用户加入了哪些多用户会议 (MUCH)?
【发布时间】:2012-01-28 01:07:43
【问题描述】:

我想知道是否有一种方法可以查询 XMPP 服务器(通过用户 JID?)以找出该用户当前所在的聊天室?如果没有,我们可以查询 jabber 服务器以获取所有活动聊天室的列表吗?

顺便说一句,我们正在为多用户聊天启用 ejabber。使用 java 库(smack?)的解决方案将是理想的。

【问题讨论】:

  • 您想要您所在的房间列表还是其他用户?两者都没有很好的答案,但第一个在理论上是可能的,第二个是侵犯隐私。
  • TX,乔。我确实想获得随机用户的聊天室列表(我想提供他的 facebook 朋友目前加入的房间列表)。
  • 我需要第一个,(查找当前用户所在的聊天)。怎么做呢?谢谢。

标签: xmpp chatroom


【解决方案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 必须在某处获得此信息..
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-24
      • 2017-01-05
      • 2016-05-11
      • 2012-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多