1IQ 節(jié)
<iq>節(jié)表示的是Info/Query(信息與查詢)夜畴,它為XMPP通信提供請(qǐng)求與響應(yīng)機(jī)制色查。它與HTTP協(xié)議的基本工作原理非常相似剪勿,允許獲取和設(shè)置查詢荔燎,與HTTP 的GET 和POST 動(dòng)作類似耻姥。每個(gè)節(jié)都必須有一個(gè)響應(yīng),而且前面曾經(jīng)提到過有咨,該節(jié)的必需的id 屬性將用來把響應(yīng)與導(dǎo)致該響應(yīng)的請(qǐng)求關(guān)聯(lián)起來琐簇。節(jié)有四種,通過該節(jié)的type 屬性區(qū)分座享。有兩種節(jié)請(qǐng)求(get 和set)和兩種響應(yīng)(result 和error)婉商。在本書中,這些節(jié)通常被縮寫為IQ-get渣叛、IQ-set丈秩、IQ-result和IQ-error。每一個(gè)IQ-get 或IQ-set 節(jié)均必須接收響應(yīng)的IQ-result 或IQ-error 節(jié)淳衙。
下面的示例給出了一些常見的節(jié)以及它們可能的響應(yīng)癣籽。注意挽唉,與和節(jié)(它們定義了子元素)不同,節(jié)通常只包含與它們功能相關(guān)的擴(kuò)展元素筷狼。此外,每一對(duì)節(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ā)送了一個(gè)格式錯(cuò)誤的花名冊(cè)請(qǐng)求埂材。服務(wù)器使用一個(gè)錯(cuò)誤提示節(jié)作為響應(yīng)。后面我們將詳細(xì)討論錯(cuò)誤提示節(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ā)送正確的請(qǐng)求之后俏险,服務(wù)器將Jane 的簡(jiǎn)短花名冊(cè)響應(yīng)給她⊙镄鳎可以看到Elizabeth 和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 添加到自己的花名冊(cè)中,服務(wù)器用一個(gè)空白IQ-result 節(jié)來指出添加成功挤牛。如果應(yīng)答節(jié)只是成功確認(rèn)莹痢,那么IQ-result 節(jié)通常是空白的。
在任何需要結(jié)果數(shù)據(jù)或者需要簡(jiǎn)單確認(rèn)的場(chǎng)合中墓赴,<iq>節(jié)都非常有用竞膳。大多數(shù)XMPP 擴(kuò)展協(xié)議混合使用<iq>和<message>節(jié)來實(shí)現(xiàn)它們的功能。<iq>節(jié)用于類似于配置和狀態(tài)變化這樣的信息诫硕,而<message>節(jié)則用于常規(guī)通信坦辟。在某些場(chǎng)合中,<iq>節(jié)也用于通信章办,這是因?yàn)楣?jié)確認(rèn)機(jī)
制可實(shí)現(xiàn)限速功能锉走。