麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

XMPP-可擴展的消息和出席信息協議(概述)

2019-11-14 19:52:36
字體:
來源:轉載
供稿:網友

概述


  可擴展消息的和出席信息協議(XMPP)主要采用xml流實現在任意兩個網絡終端接近實時的交換結構化信息,XMPP提供一個通用的可擴展的框架來交換XML數據,用于準實時消息和出席信息以及請求-響應服務。

通用的架構


  XMPP沒有指定任何特定的網絡結構,但它通常是采用客戶-服務器架構進行實現,其中客戶端通過TCP方式使用XMPP訪問服務器,服務器之間也采用TCP方式進行通信。

1.同一域名服務器和客戶端組成的簡單XMPP架構

  具有惟一名稱的客戶機通過相關的服務器與另外一個具有惟一名稱的客戶機進行通信,每個客戶機執行客戶機的協議表單,而服務器在表單中提供路由功能

2.包含網關的復雜XMPP架構

  針對不同域(XMPP域,短信服務(SMS)域和一個 SMTP 域)之間,網關可以把 XMPP 翻譯成外部(非XMPP)消息系統,并把返回的消息翻譯成 XMPP 。作為一個可擴展的協議,XMPP 對于在不同的端點協議間提供統一連接性來說是一個理想的中樞協議。XMPP 網關允許終止一個給定的客戶端到服務器的會話,并且向目標端點協議發起一個新的會話(同時進行必要的協議轉換)。

地址空間


概覽  

  一個XMPP實體的地址被稱為JID,一個合法的JID包含可選節點,域名,可選資源名,一個JID作為網絡通訊ID,其具有唯一性

  XMPPJID *jid = [ node "@" ] domain [ "/" resource ];

  一個 JID 的每個合法部分(節點名,域名,資源名)的長度不能(MUST NOT)超過 1023 字節。也就是整體長度(包括 '@' 和 '/' )不能超過 3071 字節

[可選節點]域名[可選資源]

  域名:主要ID,一個域名標識引用的實體,并非總是一個服務器,它也可能是一個服務器的子域地址

  可選節點:第二ID,通常表示一個向服務器或網關請求和使用網絡服務的實體(比如一個客戶端),當然它也能夠表示其他的實體(比如在多用戶聊天系統中的一個房間)

    可選資源:通常表示一個特定的會話,連接(比如設備或者所在位置),或者一個附屬于某個節點ID實體相關實體的對象(比如多用戶聊天室中的一個參加者),也稱第三ID

XML流和XML節 


概覽

  XML流和XML節使得實體之間異步交換低負載的結構化信息成為可能

  XML流:

    一個XML流是一個容器,包含了兩個實體之間通過網絡交換的XML元素。一個XML流是由一個XML打開標簽 <stream> (包含適當的屬性和名字空間聲明)開始的,流的結尾則是一個XML關閉L標簽 </stream> 。在流的整個生命周期,初始化它的實體可以通過流發送大量的XML元素,用于流的握手(TLS握手或SASL握手)或XML節(此處主要指符合缺省名字空間的元素,包括<message/>,<PResence/>, 或 <iq/> 元素)

    “初始的流”由初始化實體(通常是一個客戶端或服務器)和接收實體(通常是一個服務器)握手,從接收實體來看,它就是那個初始實體的"會話".初始化流允許從初始化實體到接收實體的單向通信;為了使接收實體能夠和初始實體交換信息,接收實體必須發起一個反向的握手(應答流).

  XML節:

    一個XML節是一個實體通過 XML 流向另一個實體發送的結構化信息中的一個離散的語義單位。任何XML節都是從一個XML流的下一級的某個打開標簽(如 <presence>)開始,到相應的關閉標簽(如 </presence>)(此處XML節僅限于<message/>, <presence/>, 和 <iq/> 元素)

  客戶端與服務端進行會話:

    1.客戶端發送一個打開標簽<Stream>給服務器,初始化流(也可在此之前發送一段文本聲明XML版本和支持的字符集)

    2.服務器回復一個XML流給客戶端(也可在此之前發送一段文本聲明)

    3.客戶端完成SASL握手

    4.客戶端發送關閉標簽</stream>給服務器(或服務器發送給客戶端)

    5.客戶端與服務器徹底終結這個連接(通常為一個TCP連接)

通信類別

  使用 XMPP 的實時消息傳遞系統包含三大通信類別:

  • 消息傳遞,其中數據在有關各方之間傳輸;<message>
  • 聯機狀態,它允許用戶廣播其在線狀態和可用性;<presence>
  • 信息/查詢請求,它允許 XMPP 實體發起請求并從另一個實體接收響應。<iq>
 <stream>     <presence>        <show/>     </presence>     <message>        <body/>     </message>     <iq>        <query/>     </iq> </stream>

綁定到TCP

  雖然有很多非必需的連接使用XML流來綁定[TCP]連接(兩個實體可以通過別的機制來互聯,比如通過[HTTP]連接輪詢),在客戶和服務器通信的過程中,服務器必須允許客戶端共享一個TCP連接來傳輸XML節,包括從客戶端傳到服務器和從服務器傳到客戶端。在服務器之間的通信過程中,服務器必須用一個 TCP連接 向對方發送 XML節,另一個 TCP連接(由對方初始化)接收對方的XML節,一共兩個 TCP連接。

流的安全

  當XML流開始握手時,盡管可能存在某種共有的機制能夠保證雙向安全,但是“初始化流”(比如從初始化實體發給接收實體的流)和“應答流”(比如從接收實體發給初始化實體的流)還是必須安全的分開。在流被驗證之間,實體不應該嘗試通過流發送XML節;就算它這樣做了,對方的實體也不能接受這些XML節,并且應該返回一個 <not-authorized/> 的流錯誤信息并且終止當前TCP連接上雙方的XML流;注意,這僅僅是針對XML節(包含在缺省命名空間中的 <message/>, <presence/>, 和 <iq/> 元素),而不是指那些用于 TLS握手、SASL握手握手的流。

Stream屬性

  • to            : 出現在初始化實體發給接受實體的XML流中,值為接受實體JID,若其出現在應答流中,初始化實體應忽略
  • from        : 出現在接收實體發給初始化實體的 XML 流的頭當中,值為初始化實體JID,若其出現的初始化實體中,接受實體應忽略
  • id            : 用于接收實體發送給初始化實體 XML流的頭中,由接受實體創建的唯一ID,也做初始化實體與接受實體之間的會話ID,若其出現在初始化流中,接受實體應忽略
  • xml:lang  : 包含在初始化發給接受實體的初始化流中,用于指定在流中傳輸的可讀XML字符所使用的缺省語言,如該值沒有則應用缺省值,如該值存在,則接受實體不能修改該值
  • version    : 版本支持

流錯誤

  流的根元素可以(MAY)包含一個 <error/> 子元素,由流的名字空間前綴作為它的前綴

<stream:error>     <defined-condition xmlns='urn:ietf:params:xml:ns:xmpp-streams'/>    [optional text]     <text xmlns='urn:ietf:params:xml:ns:xmpp-streams' xml:lang='langcode'>        descriptive text     </text></stream:error>

規則

以下規則適用于流級別的錯誤:
  • 它假定所有流級別的錯誤都是不可恢復的;所以,如果一個錯誤發生在流級別,發現這個錯誤的實體必須(MUST)發送一個流錯誤信息給另一個實體,發送一個關閉標簽 </stream>,并終止這個流所在的TCP連接。
  • 如果這個錯誤發生在流剛開始設置的時候,接收實體必須(MUST)仍然發送一個開放標簽 <stream> ,并在流元素中包含一個<error/>的子元素,然后發送一個關閉標簽 </stream>,最后終止相應的TCP連接。在這種情況下,如果初始化實體在 'to' 屬性中提供了一個未知的主機名,服務器應該(SHOULD)在終止之前,先在流的頭信息的 'from' 屬性中提供一個服務器認證的主機名.

流錯誤條件定義

以下流級別的錯誤條件是已定義的:
  • <bad-format/> -- 實體已經發送XML但是不能被處理;這個錯誤可以被更多特定的XML相關的錯誤替換,比如 <bad-namespace-prefix/>, <invalid-xml/>, <restricted-xml/>, <unsupported-encoding/>, 以及 <xml-not-well-formed/>,盡管更多特定的錯誤是首選的。 
  • <bad-namespace-prefix/> -- 實體發送的名字空間前綴不被支持,或者在一個需要某種前綴的元素中沒有發送一個名字空間前綴.
  • <conflict/> -- 服務器正在關閉為這個實體激活的流,因為一個和已經存在的流有沖突的新的流已經被初始化。
  • <connection-timeout/> -- 實體已經很長時間沒有通過這個流發生任何通信流量(可由一個本地服務策略來配置).
  • <host-gone/> -- 初始化實體在流的頭信息中提供的'to'屬性的值所指定的主機已經不再由這臺服務器提供
  • <host-unknown/> -- 由初始化實體在流的頭信息中提供的 'to' 屬性的值和由服務器提供的主機名不一致.
  • <improper-addressing/> -- 一個在兩臺服務器之間傳送的節缺少 'to' 或 'from' 屬性(或者這個屬性沒有值).
  • <internal-server-error/> -- 服務器配置錯誤或者其他未定義的內部錯誤,使得服務器無法提供流服務.
  • <invalid-from/> -- 在'from'屬性中提供的 JID 或 主機名地址,和認證的 JID不匹配 或服務器之間無法通過SASL(或回撥)協商出合法的域名,或客戶端和服務器之間無法通過它進行認證和資源綁定。
  • <invalid-id/> -- 流 ID 或回撥 ID 是非法的或和以前提供的 ID 不一致.
  • <invalid-xml/> -- 實體通過流發送了一個非法的XML給執行驗證的服務器.
  • <not-authorized/> -- 實體試圖在流被驗證之前發送數據或不被許可執行一個和流協商有關的動作,接收實體在發送錯誤信息之前不允許處理厭惡的節。
  • <policy-violation/> -- 實體違反了某些本地服務策略;服務器可以選擇在 <text/> 元素或應用程序定義的錯誤條件(元素)中詳細說明策略。
  • <remote-connection-failed/> -- 服務器無法正確連接到用于驗證或授權的遠程實體。
  • <resource-constraint/> -- 服務器缺乏必要的系統資源為流服務。
  • <restricted-xml/> -- 實體試圖發送受限的XML特性,比如一個注釋,處理指示,DTD,實體參考,或保留的字符.
  • <see-other-host/> -- 服務器將不提供服務給初始化實體但是把它重定向到另一臺主機;服務器應該在<see-other-host/>元素的XML字符數據中指明替代服務器名或IP地址(它必須(必須)是合法的域名標識)。
  • <system-shutdown/> -- 服務器正在關機并且所有激活的流正在被關閉。
  • <undefined-condition/> -- 錯誤條件不在本文已定義的錯誤條件列表之中;這個錯誤條件應該僅用于"應用程序定義條件"元素.
  • <unsupported-encoding/> -- 初始化實體以一個服務器不不支持的編碼方式編碼了一個流.
  • <unsupported-stanza-type/> -- 初始化實體發送了一個流的一級子元素但是服務器不支持.
  • <unsupported-version/> -- 由初始化實體在流的頭信息中指定的'version'屬性的值所指定的版本不被服務器支持;服務器可以在<text/>元素中指定一個它支持的版本號.
  • <xml-not-well-formed/> -- 初始化實體發送了一個不規范的XML(參考[XML])

參考資料:

http://www.ibm.com/developerworks/cn/xml/x-xmppintro/index.html

http://www.ibm.com/developerworks/cn/xml/tutorials/x-realtimeXMPPTut/index.html

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧美一级高清片在线 | 国产九色在线观看 | 久久草草影视免费网 | 最新中文字幕第一页视频 | 精品亚洲一区二区 | 国产黄色免费网站 | 欧美日韩中文字幕在线视频 | 中文字幕在线免费观看电影 | 国产免费美女 | 亚洲第五色综合网 | 亚洲5区| 欧美国产一级片 | 网站毛片 | 免费毛片电影 | 国产精品久久久久久久午夜片 | 色网站在线免费观看 | 久久精品日韩一区 | 久久精品黄 | 成人午夜一区二区 | 久久综合狠狠综合久久 | 久久99精品久久久久久秒播放器 | 九九视屏 | 一级啪啪片 | 亚洲人成综合第一网 | 在线观看中文字幕av | 极品美女一级毛片 | 一级毛片在线视频 | 天天色综合2| av电影在线免费 | a一级黄 | 国产成人77亚洲精品www | 欧美大屁股精品毛片视频 | 欧美成人一区二区三区电影 | 在线视频1区 | 中国hdxxxx护士爽在线观看 | 永久在线观看电影 | 久久丝袜脚交足黄网站免费 | 日韩黄色av网站 | 国产精品剧情一区二区三区 | 午夜视频色| 国产91小视频在线观看 |