【问题标题】:How can I tell the difference between the JID of a user and a JID of MUC?如何区分用户的 JID 和 MUC 的 JID?
【发布时间】:2014-01-31 20:01:15
【问题描述】:

假设我有两个 JID:

  • JID 1:bob@example.com
  • JID 2 room@chat.example.com

JID 2 显然是指聊天服务器,但聊天服务器中并不总是包含聊天或会议一词。

有没有办法使用 Smack 库来判断哪个是哪个?

【问题讨论】:

    标签: xmpp smack multiuserchat


    【解决方案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
    

    【讨论】:

    • 这将是用户在房间中的昵称,可能与他们的用户名不同。
    猜你喜欢
    • 2023-03-16
    • 2012-07-05
    • 2013-03-09
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多