6

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

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

4

3 回答 3

3

正如 Joe Hildebrand 所提到的,没有这样的标准功能,因为通过 XMPP 允许这样做是违反隐私的,所以你不能指望 Smack 这样做。也许有了管理员权限,您可以拥有一个自定义协议扩展来做到这一点,但这似乎有风险。

但是,在服务器级别,您应该能够为 ejabberd 编写一个自定义模块,该模块将查询或索引所有用户所在的房间。这不是标准的,并且涉及插件开发。

于 2012-01-29T11:09:37.467 回答
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 组件提供了这个特性,那么如果这个信息被暴露,它就不能被客户端控制。但是如果客户提供了这个功能,那么他当然可以控制谁可以检索这个信息。您可以决定在您的情况下哪种方法更好。

于 2013-03-02T12:54:25.880 回答
0

获取所有聊天室没有问题,只需使用此查询即可。

似乎已经有一个关于如何用 smack 检索房间的问题。看这里

于 2012-01-28T01:53:24.717 回答