【问题标题】:XMPP Get number of room members without connecting to a roomXMPP 在不连接房间的情况下获取房间成员的数量
【发布时间】:2014-06-25 21:51:51
【问题描述】:

我有:ios 应用程序; 服务器:openfire; 框架:来自 Robby Hanson 的 xmppframework。

应用程序的逻辑是当用户登录后,应用程序会将他推入一个成员数量最少的随机房间。

应用程序成功从服务器获取所有房间的列表。 但我需要知道这些房间中的哪些房间有供用户使用的空位!

有一个名为“fetchmemberslist”的方法,但它只会在您连接到该房间时返回该房间的成员列表。

我需要在不连接房间的情况下也能做同样事情的东西。

想想如果我有 1000 个房间。使用这种方法,应用程序需要连接到每个房间,设置委托,激活,等待 IQ,移除委托,停用,然后通过一个数组找到成员最少的一个。 是不是太过分了?

我已经挖掘了整个互联网,当你连接到一个房间时,一切都会导致获得一个成员列表。

有没有办法在不连接房间的情况下做到这一点。

非常感谢!

【问题讨论】:

    标签: ios xmpp openfire xmppframework


    【解决方案1】:

    1) fetchMemberList: 查询房间成员,而不是现在在房间里的人员列表。你真的要会员,而不是在线用户数吗?无论如何,如果您是房间管理员,则此查询无需加入房间即可工作。

    2)如果你想查询在线用户,你应该使用不同的查询 - 见http://xmpp.org/extensions/xep-0045.html#disco-roomitems

    3) 此外,没有人可以禁止您在服务器端实现房间成员/在线计数,并创建像 <iq id='123' type='get'><freeroom xmlns='my:freeroom:query' /></iq> 这样的自定义查询,并使用像 <iq id='123' type='result'><freeroom xmlns='my:freeroom:query'><jid>roomname@conference.example.com</jid></freeroom></iq> 这样的房间 JID 的响应,其中房间名称是由服务器本身找到的。

    【讨论】:

    • 谢谢你,维塔利斯特!你的第二个技巧有帮助!关于 fetchmemberslist 的一点评论我是房间的管理员和所有者,但是当我在上面调用 fetchmemberslist 时(不加入它),我收到错误 401 not-authorized 但是!这种方法不能满足我的需要。它只返回成员。
    • 在学习 disco#items 时,我遇到了 disco#info,它返回一个 extended result,每个房间有很多人,还有很多其他的东西。我不需要其他的东西。是否可以创建只返回特定字段的查询?我对 感兴趣。我尝试了一些方法,但我仍然得到了整个扩展结果。
    • 还有一件事。我首先得到一个房间列表,然后我将 disco#info 发送到每个房间。我可以加入两个 IQ 来查询房间列表及其入住人数吗?谢谢!!!
    • 1) 管理成员列表应该在不加入房间的情况下工作,我不确定它是否在 XEP-0045 中定义,但韵律和 ejabberd 肯定允许它,可能是 openfire 问题。 2) 解析扩展结果和获取入住人数的问题是什么?您可以使用 XPath 查询或类似的东西来实现它。事实上,每个 XMPP 库都会解析 XML 数据包并找到所需的信息。 3)不,您不能将一个 IQ 发送到多个房间,但您可以使用自定义 IQ 扩展服务器端,正如我在第一个答案中描述的那样。
    • 谢谢你,维塔利斯特!它帮助很大!可能还有一种方法可以按每个人加入房间的时间对一堆居住者进行分类? Disco-roomitems 返回一个以某种神秘方式排序的列表。既不按加入时间也不按字母顺序。谢谢!!!
    猜你喜欢
    • 1970-01-01
    • 2012-04-21
    • 1970-01-01
    • 2017-03-27
    • 2015-07-14
    • 2016-04-09
    • 2015-06-23
    • 2015-08-31
    • 2018-04-06
    相关资源
    最近更新 更多