如何区分用户的 JID 和 MUC 的 JID?
Posted
技术标签:
【中文标题】如何区分用户的 JID 和 MUC 的 JID?【英文标题】:How can I tell the difference between the JID of a user and a JID of MUC? 【发布时间】:2014-01-31 20:01:15 【问题描述】:假设我有两个 JID:
JID 1:bob@example.com
JID 2 room@chat.example.com
JID 2 显然是指聊天服务器,但聊天服务器中并不总是包含聊天或会议一词。
有没有办法使用 Smack 库来判断哪个是哪个?
【问题讨论】:
【参考方案1】:您无法通过查看 JID 来判断。你必须在给定的协议交换中保留足够的上下文才能知道你在说什么。
通常在启动时,客户端会向服务器发送disco#items
查询:
<iq type='get'
to='shakespeare.lit'
id='items1'>
<query xmlns='http://jabber.org/protocol/disco#items'/>
</iq>
要查找所有本地服务,然后向每个服务发送disco#info
查询以了解有关该服务的更多信息。一旦你find a MUC server:
<iq from='chat.shakespeare.lit'
type='result'>
<query xmlns='http://jabber.org/protocol/disco#info'>
<identity
category='conference'
name='Shakespearean Chat Service'
type='text'/>
<feature var='http://jabber.org/protocol/muc'/>
</query>
</iq>
您知道所有包含此域名的 JID(上例中为 chat.shakespeare.lit
)都与 MUC 房间相关联。
【讨论】:
有什么方法可以通过发送某个 IQ 节来查看响应吗?【参考方案2】:MUC 中的用户 JID 将(应该)在末尾有用户名,看起来像:
roomname@conference.example.com/username
【讨论】:
这将是用户在房间中的昵称,可能与他们的用户名不同。以上是关于如何区分用户的 JID 和 MUC 的 JID?的主要内容,如果未能解决你的问题,请参考以下文章
如何检查用户 JID 是不是已在 XMPPFrameWork 中使用