1IQ 節(jié)
<iq>節(jié)表示的是Info/Query(信息與查詢),它為XMPP通信提供請求與響應(yīng)機制。它與HTTP協(xié)議的基本工作原理非常相似,允許獲取和設(shè)置查詢,與HTTP 的GET 和POST 動作類似。每個節(jié)都必須有一個響應(yīng),而且前面曾經(jīng)提到過,該節(jié)的必需的id 屬性將用來把響應(yīng)與導(dǎo)致該響應(yīng)的請求關(guān)聯(lián)起來。節(jié)有四種,通過該節(jié)的type 屬性區(qū)分。有兩種節(jié)請求(get 和set)和兩種響應(yīng)(result 和error)。在本書中,這些節(jié)通常被縮寫為IQ-get、IQ-set、IQ-result和IQ-error。每一個IQ-get 或IQ-set 節(jié)均必須接收響應(yīng)的IQ-result 或IQ-error 節(jié)。
下面的示例給出了一些常見的節(jié)以及它們可能的響應(yīng)。注意,與和節(jié)(它們定義了子元素)不同,節(jié)通常只包含與它們功能相關(guān)的擴展元素。此外,每一對節(jié)必須匹配id 屬性。
<iq from = 'jane@longbourn.lit/garden'
type = 'get'
id = 'roster1'>
<query xmlns='jabber:iq:roster'/>
</iq>
<id to = 'jane@longbourn.lit/garden'
type = 'error'
id = 'roster1'>
<query xmlns='jabber:iq:roster'/>
<error type='cancel'>
<feature-not-implementer xmlns='urn:left:params:xml:ns:xmpp-stanzas'/>
</error>
</iq>
Jane 向她的服務(wù)器發(fā)送了一個格式錯誤的花名冊請求。服務(wù)器使用一個錯誤提示節(jié)作為響應(yīng)。后面我們將詳細討論錯誤提示節(jié)。
<iq from = 'jane@longbourn.lit/garden'
type = 'get'
id='roster2'>
<query xmlns='jabber:iq:roster'/>
</iq>
<iq to='jane@longbourn.lit/garden'
type='result'
id='roster2'>
<query xmlns='jabber:iq:roster'>
<item jid='elizabeth@longbourn.lit' name = 'Elizabeth'/>
<item jid='bingley@netherfield.lit' name = 'Bingley'/>
</query>
</iq>
在重新發(fā)送正確的請求之后,服務(wù)器將Jane 的簡短花名冊響應(yīng)給她??梢钥吹紼lizabeth 和Bingley 均在Jane 的聯(lián)系人列表中。
第1 章了解 XMPP 協(xié)議
<id from = 'jane@longbourn.lit/garden'
type = 'set'
id = 'roster3'>
<query xmlns = 'jabber:iq:roster'>
<item jid='darcy@pemberley.lit' name = 'Mr.Dancy'/>
</query>
</iq>
<iq to = 'jane@longbourn.lit/garden'
type = 'result'
id = 'roster3'/>
Jane 試圖將Darcy 添加到自己的花名冊中,服務(wù)器用一個空白IQ-result 節(jié)來指出添加成功。如果應(yīng)答節(jié)只是成功確認,那么IQ-result 節(jié)通常是空白的。
在任何需要結(jié)果數(shù)據(jù)或者需要簡單確認的場合中,<iq>節(jié)都非常有用。大多數(shù)XMPP 擴展協(xié)議混合使用<iq>和<message>節(jié)來實現(xiàn)它們的功能。<iq>節(jié)用于類似于配置和狀態(tài)變化這樣的信息,而<message>節(jié)則用于常規(guī)通信。在某些場合中,<iq>節(jié)也用于通信,這是因為節(jié)確認機
制可實現(xiàn)限速功能。