XMPP學習4-發現世界

服務發現

XMPP實體種類多樣,支持功能複雜,項目版本更新迅速,以至於衍生了兩個問題:
1 如何獲知網絡包含的實體
2 實體支持何種XMPP協議功能
使用服務發現(disco)將解決上述問題
服務發現方法
1 disco#items 發現網絡中實體
2 disco#info 發現一個實體支持的功能
disco#items示例
通過disco#items請求發現ejabberd.org服務器實體

<iq from="[email protected]"
         id="xl391n47"
         to="ejabberd.org"
         type="get">
     <query xmlns="http://jabber.org/protocol/disco#items"/>
</iq>

服務器回覆一個相關的實體名單,其中客戶端由 id 屬性的值跟蹤

<iq from="ejabberd.org"
         id="xl391n47"
         to="[email protected]"
         type="result">
     <query xmlns="http://jabber.org/protocol/disco#items">
         <item jid="conference.ejabberd.org"/>
         <item jid="proxys.ejabberd.org"/>
     </query>
</iq>

disco#info示例
獲取網絡實體後,通過disco#info查看實體支持功能

<iq from="[email protected]"
         id="gq02kb71"
         to="conference.ejabberd.org"
         type="get">
     <query xmlns="http://jabber.org/protocol/disco#info"/>
</iq>

conference.ejabberd.org服務返回一些關於自身的信息

<iq from="conference.ejabberd.org"
         id="gq02kb71"
         to="[email protected]"
         type="result">
     <query xmlns="http://jabber.org/protocol/disco#info">
         <identity category="conference" type="text" name="公共房間"/>
         <feature var="http://jabber.org/protocol/muc"/>
         <feature var="jabber:iq:register"/>
         <feature var="vcard-temp"/>
     </query>
</iq>

由XML應答信息,可知,conference.ejabberd.org提供主機服務,文本會議服務,支持多用戶聊天協議,內置用戶名註冊和電子名片組件
注:<identity/>元素是實體“代理信息”,不透露詳細功能,但是可以宣揚身份

服務發現方式

使用服務器和服務進行服務發現
disco#items 和 disco#info 的方法通常是一起使用,以實現實體的“走遍樹”。
1 disco#items向A發送IQ-GET發現實體B
2 disco#info發現實體B功能協議
3 disco#items向B發送IQ-GET發現提示C
4 disco#info發現實體C功能協議
5 disco#items向C發送IQ-GET發現實體D
6 …
使用客戶進行服務發現
客戶至少知道一個實體,也就是自己的服務器,同時若客戶存在聯繫人名冊,可利用出席信息獲取聯繫人全JID,針對JID使用disco#info即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章