XMPP學習2-XMPP通訊原語

節通用屬性

from
識別節的起始JID,from 地址不由發送客戶端提供,而是由發送者的服務器添加郵戳,以避免地址欺騙,不建議手動設置。注意:如果客戶端-服務器流中接收到的節上沒有from屬性,就意味着該節來源於服務器自身。
to
識別節的結束JID,與from屬性類似。注意:如果客戶端-服務器流中沒有to屬性,那麼服務器將假設它是發向服務器自身的消息。
type
type 屬性指定了、或節的具體類型。
id
爲節指定id屬性以輔助識別響應。對於節,這個屬性是必需的,但對於其他兩個節,該屬性則是可選的。如果某節是爲響應一個攜帶 id 屬性的節而產生的,那麼這個應答節必須包含一個攜帶相同值的 id 屬性。

presence節

<presence>節控制並報告實體的可訪問性,有兩種主要的出席元素可以表達更豐富的信息,<show/>元素和<status/>元素,<show/>元素有四種預設值,包含“在線”,“離線”,“離開”和“請勿打擾”,<status/>元素允許用戶指定自由的格式、易於閱讀的文本來在更詳細的層次上描述用戶可用性。此外,這個節還用來建立和終止向其他實體發佈出席訂閱。
presence示例

<presence>
     <show>away</show>
     <status>Having a spot of tea</status>
</presence>

普通presence節
普通<presence>節包含三種 type 屬性表示方式
1 type屬性值爲unavailable
2 type屬性值爲error
3 不包含type屬性項,表示type值爲available
擴展presence節
擴展是相比較普通presence定義的,包含更多詳細信息,比如當前用戶心情或者正在聽的歌曲等。presence節信息會通過廣播給所有聯繫人,所以擴展presence節並不推崇
出席訂閱
用戶的服務器會自動地將出席信息廣播給那些訂閱該用戶出席信息的聯繫人,同時,用戶從所有訂閱的聯繫人那裏接收到出席更新信息,所以出席訂閱是有方向的,通過通過type標識:subscribe、unsubscribe、subscribed、unsubscribed
定向出席
定向出席是一種直接發給另一個用戶或其他實體的普通<presence>節,這種節用來向那些沒有進行出席訂閱(通常因爲只是臨時需要出席信息)的實體傳達出席狀態信息,常被用於加入和離開多用戶聊天房間(聊天室)。
下線含義
1 server向user聯絡列表中的所有人廣播user不可用通知
2 server向所有訂閱了該user 的實體廣播不可用狀態的通知
3 停止向user 發送其他實體的presence 通知
4 server停止發送message給user,轉爲offline message

message節

<message>節用來從一個實體向另一個實體發送消息,消息常被用於IM、groupchat、alerts和notifications 以及其他應用。
message示例

<message from='[email protected]/drawing_room'
                 to='[email protected]'
                 type='chat'>
     <body>Come, User2, I must have you dance.</body>
     <thread>4fd61b376fbc4950b9433f031a5595ab</thread>
</message>

message消息通過type屬性分爲5中類型
1 chat 在一對一聊天對話上下文中發送,主要關注私有的、一對一通信的 IM 應用程序
2 error 用於答覆某條導致錯誤的消息
3 normal  
4 groupchat 用於在多人聊天中發送的消息,用來區分多人聊天參與者發送的定向的私有消息與參與者發送給聊天室中所有人的廣播消息
5 headline 類型爲headline 的消息用於警示和通告
message消息內容
儘管<message>節可以包含任意擴展元素,但<body>和<thread>元素是爲向消息中添加內容而提供的正常機制,這兩種子元素均是可選的。對話(就像電子郵件一樣)可以形成線索,線索中的每條消息都與相同的對話相關聯。可以通過向<message>節中添加一個<<thread>元素來創建線索。<thread>元素的內容是一個用來區分不同線索的唯一標識符。應答節應該包含與它所應答的節相同的<thread>元素。

iq節

<iq>節表示的是 Info/Query(信息與查詢),它爲 XMPP 通信提供請求與響應機制,類似於HTTP 中的 GET、POST、PUT 方法。
<iq>節有四種,通過該節的 type 屬性可劃分爲4中:
1 get 請求實體信息(類似http GET)
2 set 請求實體提供信息或發起一個請求(類似http POST PUT)
3 result 返回一個get信息,或者確認一個set請求
4 error 通知請求實體,無法處理get或set請求
iq示例

<iq from='[email protected]/garden'
         type='get'
         id='roster1'>
     <query xmlns='jabber:iq:roster'/>
</iq>
<iq to='[email protected]/garden'
         type='error'
         id='roster1'>
     <query xmlns='jabber:iq:roster'/>
     <error type='cancel'>
         <feature-not-implemented xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
     </error>
</iq>

user1 向服務器發送了一個格式錯誤的花名冊請求,服務器使用一個錯誤提示節作爲響應。

<iq from='[email protected]/garden'
         type='get'
         id='roster2'>
     <query xmlns='jabber:iq:roster'/>
</iq>
<iq to='[email protected]/garden'
         type='result'
         id='roster2'>
     <query xmlns='jabber:iq:roster'>
     <item jid='[email protected]' name='SunWukong'/>
     <item jid='[email protected]' name='MingRen'/>
     </query>
</iq>

在重新發送正確的請求之後,服務器將user1的簡短花名冊返回。

<iq from='[email protected]/garden'
         type='set'
         id='roster3'>
     <query xmlns='jabber:iq:roster'>
     <item jid='[email protected]' name='Mr. BJ'/>
     </query>
</iq>
<iq to='[email protected]/garden'
     type='result'
     id='roster3'/>

user1試圖將BiJita添加到自己的花名冊中,服務器用一個空白 IQ-result 節來指出添加成功,如果應答節只是成功確認,那麼 IQ-result 節通常是空白的。

error節

所有三種 XMPP 節都有一個 error 類型,而且錯誤提示節的每種類型的內容都是按照同一模式排列。錯誤提示節具有定義明確的結構,通常包含原節(肇事節)的內容、通用錯誤信息以及應用程序特有的錯誤條件和信息(可選)。
<error>必備type屬性,可分爲5種:
1cancel 表示不應該重試該動作,這是因爲它總會失敗
2 continue 代表一條警告信息
3 modify 表示發送的數據需要一些修改纔會被接受
4 auth 通知實體在以某種方式進行身份驗證之後重試該動作
5 wait 報告服務器臨時遇到問題,應該在稍後將原節原封不動地重新發送
<error>子元素還必須包含一個錯誤條件(從已定義條件列表中選擇一個)作爲它的子元素,它還可以包含一個<text>元素來進一步指出有關該錯誤的詳細信息。
error示例

<iq from='user1.ejabberd.org'
         to='[email protected]/sitting_room'
         type='error'
         id='subscribe1'>
     <pubsub xmlns='http://jabber.org/protocol/pubsub'>
         <subscribe node='latest_books'
              jid='[email protected]'/>
     </pubsub>
     <error type='cancel'>
          <not-allowed xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
         <closed-node xmlns='http://jabber.org/protocol/pubsub#errors'/>
         <text xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'>
              You must be on the whitelist to subscribe to this node.
         </text>
      </error>
</iq>

該錯誤提示的類型是 cancel,該值表示不應該重試該動作,而條件<not-allowed/>指出了一般性故障,<text/>子元素包含了問題描述。最後,應用程序條件元素<closed-node/>給出了精確的應用程序錯誤提示信息。

發佈了48 篇原創文章 · 獲贊 10 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章