XMPP MUC问题

Posted

技术标签:

【中文标题】XMPP MUC问题【英文标题】:XMPP MUC problem 【发布时间】:2011-04-11 11:16:41 【问题描述】:

我将XMPP 与 strope.js 和 openfire 一起使用。我有一个疑问,如何让房间里已经存在的所有成员???

更多价格: 当我刷新页面并将我的存在节发送到房间时。我从房间里得到了我的存在,我展示了加入的房间。但是如何获得所有已经在房间里的人的presence stanza

编辑:

让我逐案解释,假设 A 和 B 想要群聊。首先 A 进入房间,他看到自己在房间里。然后 B 进入房间,所以 A 得到 B 的存在节,现在在 A 侧,房间里有 A 和 B。但在 B 侧,它只显示房间中的 B。

现在 A 刷新页面,B 获得存在节,现在 B 方都在房间里,但 A 方现在只有 A 在房间里。

【问题讨论】:

根据 XMPP 规范,服务器必须将所有现有居住者房间 JID 的出席信息发送回新居住者。 (xmpp.org/extensions/xep-0045.html#enter-pres) 它可能不会在您自己的存在“回声”时立即返回,但您可能会在稍后收到一个请求或 2 个请求。你确定你成功加入了房间?您发送到房间的消息是否被其他居住者收到?请记住:服务器只会发回其他占用者的房间 JID,而不是他们的服务器完整 JID。 是的,我已成功加入房间。并且消息也被其他居住者接收。问题是,当我在房间里,其他人进来时,我就会在场,但是当我刷新时,我会独自留在房间里。 刷新时,是否使用同一个SID重新连接?还是您正在使用新连接重新连接到 Jabber? 刷新时,是否从服务器注销?或者您只是通过重新使用相同的 SID 重新连接?如果您从未从服务器注销,则服务器可能认为您仍在房间中,并且向房间发送另一条在线消息只会更新您的状态。 (xmpp.org/extensions/xep-0045.html#changepres) 如果可能,请尝试离开并重新加入房间。或者,由于您总是将 SID 保存在某个地方,也许您也可以保存房间的名单......? @Jimy - 你能显示 XMPP 交易吗? MUC 是否配置为向其成员广播回存在状态? (我相信这是所有 MUC 的默认配置。) A 刷新后,您是否尝试离开并重新加入房间以查看 B 的存在是否得到回显? 【参考方案1】:

Openfire 将出席信息发送给房间中的所有居住者,只需在出席信息节中添加一个事件处理程序即可。此外,当有新成员加入房间时,房间本身会将她的存在广播给房间内的所有成员。

另外一种让所有用户进入房间的方法是查询房间名册

希望对你有帮助

【讨论】:

以上是关于XMPP MUC问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 xmpp 在 muc 中创建空间时出错

XMPP MUC问题

将用户添加到 xmpp 组或 muc

如何使用 python xmpppy 获取 XMPP 服务器中所有 MUC 的列表?

Spring Integration Xmpp 4 - 发送创建 muc 请求

不允许任何所有者撤销创建房间/MUC 的用户的所有权 - Ejabberd XMPP