XMPP 多用户聊天获取用户列表

Posted

技术标签:

【中文标题】XMPP 多用户聊天获取用户列表【英文标题】:XMPP multi-user-chat get user list 【发布时间】:2011-07-09 14:12:48 【问题描述】:

获取所有用户的列表和 XMPP 多用户聊天的状态 我这样做了

<iq from='hag66@shakespeare.lit/pda'
    id='kl2fax27'
    to='coven@chat.shakespeare.lit'
    type='get'>
  <query xmlns='http://jabber.org/protocol/disco#items'/>
</iq>

获取列表但没有状态。 我需要让所有用户都知道状态吗?

【问题讨论】:

【参考方案1】:

请阅读XEP-0045,它描述了多用户聊天 (MUC) 协议。你需要加入房间:

<presence
    from='hag66@shakespeare.lit/pda'
    to='coven@chat.shakespeare.lit/thirdwitch'>
  <x xmlns='http://jabber.org/protocol/muc'/>
</presence>

然后你会从房间里的每个人那里得到一个存在节以及他们当前的状态:

<presence
    from='coven@chat.shakespeare.lit/firstwitch'
    to='hag66@shakespeare.lit/pda'>
  <x xmlns='http://jabber.org/protocol/muc#user'>
    <item affiliation='owner' role='moderator'/>
  </x>
</presence>

<presence
    from='coven@chat.shakespeare.lit/secondwitch'
    to='hag66@shakespeare.lit/pda'>
  <x xmlns='http://jabber.org/protocol/muc#user'>
    <item affiliation='admin' role='moderator'/>
  </x>
</presence>

在你问之前,不,没有办法告诉你什么时候“完成”接收这些通知,因为用户可能随时来去。您现在订阅了居住者的状态变化,并且必须跟踪接收方的当前状态。

【讨论】:

为了完整起见,加入房间后确实有办法告诉所谓的Presence Broadcast:最终的存在总是自我存在,用a表示&lt;status code='110'/&gt;. @max.weller 我很确定有些实现会出错。【参考方案2】:

阅读XMPP RFC,我看到状态是通过存在消息传达的,并且您要求另一个实体现在通过发送probe 来报告其状态(而不是等待它在广播中告诉您)您将收到 directed 响应的状态请求(§5.5 of the RFC 给出了一些示例)。当然,您可以正确解释他们所说的内容……

【讨论】:

以上是关于XMPP 多用户聊天获取用户列表的主要内容,如果未能解决你的问题,请参考以下文章

多用户聊天 XMPP

如何在 XMPP 的聊天室中获取用户加入时间

有没有办法确定用户加入了哪些多用户会议 (MUCH)?

XMPP Smack 聊天应用程序中的多设备支持

多用户聊天 (MUC) 移动应用程序的最佳方法

如何使用 asmack 在 android 中创建多用户聊天应用程序