欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
基于XMPP的即時(shí)通信系統的建立

XMPP詳解

XMPP(eXtensible Messaging and Presence Protocol,可擴展消息處理和現場(chǎng)協(xié)議)是一種在兩個(gè)地點(diǎn)間傳遞小型結構化數據的協(xié)議。在此基礎上,XMPP協(xié)議已經(jīng)被用來(lái)構建大規模即時(shí)通信系統、游戲平臺、協(xié)作空間及語(yǔ)音和視頻會(huì )議系統。

XMPP由幾個(gè)小的構造塊組成,并在此基礎上擴展出了更多的構造塊。XMPP中有眾多系統:發(fā)布-訂閱服務(wù)、多人聊天、表單檢索與處理、服務(wù)發(fā)現、實(shí)時(shí)數據傳輸、隱私處理及遠程過(guò)程調用等。

大多數社交媒體(Facebook及Twitter)也采用了XMPP協(xié)議。

什么是XMPP

與其他協(xié)議一樣,XMPP定義了在兩個(gè)或者更多通信實(shí)體間傳遞數據所采用的格式。對于XMPP,實(shí)體通常是指客戶(hù)端服務(wù)器,但是其也允許客戶(hù)端與客戶(hù)端或服務(wù)器端與服務(wù)器端的通信。

在XMPP上交換的是XML數據,采用這種格式,使XMPP協(xié)議獲得了極大的可擴展性,因為使用XML可以方便的新增功能并保證前后向兼容。使用XML較二進(jìn)制協(xié)議占用更大的帶寬,但獲得的優(yōu)勢是具有了幾乎無(wú)限的可擴展性。

用戶(hù)可以向XMPP Standards Foundation注冊協(xié)議擴展。

在XMPP中,XML數據被組織為了一對流,每個(gè)流分別對應通信的一個(gè)方向。每個(gè)XML流均由一個(gè)開(kāi)始元素、后跟XMPP節和其他頂級元素,然后是一個(gè)結束元素組成。每個(gè)XMPP節(可帶有子元素及屬性)均是該流的一級子元素。在XMPP連接末尾,這兩個(gè)流形成了一對有效的XMPP文檔。

XMPP節構成了該協(xié)議的核心部分,而XMPP應用程序則關(guān)注如何發(fā)送和響應各種類(lèi)型的節。節可能包含網(wǎng)絡(luò )上其他實(shí)體的信息、類(lèi)似于電子郵件的個(gè)人消息或為計算機處理而設計的結構化數據。

<message to=’elizabeth@longbourn.lit’ from=’darcy@pemberley.lit/dance’ type=’chat’>         <body>what think you of books</body></message>

在一個(gè)典型的XMPP會(huì )話(huà)中,一個(gè)上述的節將會(huì )從darcy的XMPP客戶(hù)端發(fā)送到她的XMPP服務(wù)器,她的服務(wù)器將會(huì )注意到該節的目的地是某個(gè)遠程服務(wù)器上的一個(gè)實(shí)體,因此與該遠程服務(wù)器先建立XMPP連接,并將消息轉發(fā)該處。

這種通信網(wǎng)絡(luò )與電子郵件類(lèi)似,但與電子郵件服務(wù)器不同的是,XMPP間的服務(wù)器可以直接通信,而不需要借助中間服務(wù)器。

這種直接通信避免了垃圾信息的干擾,且還支持通過(guò)TLS(Transport Layer Security,傳輸層安全)來(lái)加密通信并通過(guò)SASL(Simple Authentication and Security Layers,簡(jiǎn)單身份驗證與安全層)實(shí)現身份驗證機制。

XMPP使用傳遞短小信息來(lái)設計的,而非針對大型數據塊,但XMPP能夠用來(lái)協(xié)商并建立可在端點(diǎn)間傳遞大型數據塊的帶內或者帶外傳輸。

XMPP歷史

最初各大公司發(fā)布的ICQ均基于其公司運營(yíng)的專(zhuān)有協(xié)議和網(wǎng)絡(luò )(ICQ,Yahoo Pager)。

開(kāi)發(fā)人員企圖互通這些IM的努力由于協(xié)議的閉源特性失敗了。

1991年1月Jeremie Miller發(fā)布了Jabber項目,Jabber是基于XML的去中心化的即時(shí)通信協(xié)議,同時(shí)也是一個(gè)叫jabberd的服務(wù)器實(shí)現。

2000年5月,Jabber的核心協(xié)議穩定,jabberd也正式發(fā)布了。

2001年,JSF(Jabber Software Foundation,Jabber軟件基金會(huì ))成立,并開(kāi)始圍繞jabber協(xié)議做規范性工作。

2002年12月,JSF向IETF提交了核心規范,并成立了一個(gè)IETF小組。

2004年10月,這個(gè)標準化進(jìn)程產(chǎn)生了Jabber協(xié)議的改進(jìn)版,改名為XMPP,其文檔成為RFC標準,編號分別為3920、3921、3922和3923。

最初開(kāi)發(fā)人員向JSF提交的擴展稱(chēng)為JEP(Jabber Extension Proposal,Jabber擴展提議)。最終隨著(zhù)Jabber過(guò)度到XMPP,JSF更名為XSF(XMPP Standard Foundation,XMPP標準基金會(huì ))和XEP(XMPP Extension Proposal,XMPP擴展提議)。

2005年XMPP技術(shù)開(kāi)始大規模部署,例如Google Talk。

先進(jìn)有大約300個(gè)XEP,并有數十種客戶(hù)端和服務(wù)端實(shí)現,開(kāi)源及商用均有,實(shí)際上,任何編程語(yǔ)言都可以找到這樣一個(gè)庫來(lái)加速XMPP開(kāi)發(fā)進(jìn)程。

XMPP網(wǎng)絡(luò )

任何XMPP網(wǎng)絡(luò )都是由若干角色組成,可以分為服務(wù)器端、客戶(hù)端、組件和服務(wù)器插件。

XMPP網(wǎng)絡(luò )與WWW網(wǎng)絡(luò )及EMAIL網(wǎng)絡(luò )不同,XMPP服務(wù)器之間尋址只會(huì )跳一次,而EMAIL協(xié)議則會(huì )有多個(gè)中轉服務(wù)器,XMPP保存完整的列表。

 

服務(wù)器

XMPP服務(wù)器是任何XMPP網(wǎng)絡(luò )的通信系統,服務(wù)器的任務(wù)就是為XMPP節提供路由。無(wú)論這些節是從內部的一個(gè)用戶(hù)發(fā)往另外一個(gè)用戶(hù)還是本地用戶(hù)發(fā)送給服務(wù)器。

一組能夠相互通信的XMPP服務(wù)器構成了XMPP網(wǎng)絡(luò )。

XMPP服務(wù)器總是允許用戶(hù)連接到自己,但是也可以編寫(xiě)直接使用服務(wù)器-服務(wù)器協(xié)議的應用和程序,來(lái)減輕路由消耗。

Ejabberd、Openfire和Tigase是三種能夠運行在Windows,Mac OS X和Linux的開(kāi)源服務(wù)器。

M-Link和Jabber XCP是商用產(chǎn)品。

客戶(hù)端

大多數XMPP實(shí)體均是客戶(hù)端,通過(guò)客戶(hù)端-服務(wù)器協(xié)議連接到XMPP服務(wù)器。

客戶(hù)端必須向某個(gè)地方的XMPP服務(wù)器進(jìn)行身份驗證。服務(wù)器會(huì )將該客戶(hù)端發(fā)送的所有節路由到合適的目的地。

服務(wù)器還負責管理客戶(hù)端會(huì )話(huà)的其他幾個(gè)方面,包括花名冊及裸地址。

組件

不僅僅是客戶(hù)端能夠連接到XMPP服務(wù)器,大多數服務(wù)器還支持外部服務(wù)器組件。這些組件通過(guò)添加某種新服務(wù)來(lái)增強服務(wù)器的行為。這些組件在服務(wù)器內有各自的身份和地址,但運行在外部并通過(guò)組件協(xié)議通信。

組件協(xié)議(XEP-0114)可以讓開(kāi)發(fā)人員以一種服務(wù)器不可知的方式創(chuàng )建服務(wù)器擴展,例如多人聊天服務(wù)。

組件也需要向XMPP服務(wù)器進(jìn)行身份驗證,但要較客戶(hù)端的完全SASL驗證簡(jiǎn)單,例如口令。

每個(gè)組件編程服務(wù)器內部一個(gè)可單獨尋址的實(shí)體,在外界看類(lèi)似于一個(gè)子服務(wù)器。除了基本節之外,XMPP服務(wù)器不會(huì )代替已連接組件來(lái)管理其他節的路由。

服務(wù)器還允許組件在內部自行路由或管理節,因而更為靈活。

插件

許多XMPP服務(wù)器還支持使用插件進(jìn)行擴展,但插件深入到服務(wù)器內部,有較高的效率以及最低的通用性。

插件一般是綁定特定類(lèi)型的服務(wù)器的。

XMPP尋址

XMPP網(wǎng)絡(luò )上的每個(gè)實(shí)體都有一個(gè)或多個(gè)地址(稱(chēng)為JID,jabber identifier)。通常類(lèi)似于:

darcy@pemberley.lit和elizabeth@longbourn.lit就是兩個(gè)JID。

JID由三個(gè)部分組成,節點(diǎn)、域和資源,域是必須的,其他兩個(gè)部分是可選的。

域是實(shí)體(服務(wù)器、組件或插件)可解析的DNS名稱(chēng)。僅由域組成的JID是有效地址,表示服務(wù)器地址。指向域的節將由服務(wù)器自身處理,并可能被路由到某個(gè)組件或插件。

本地部分通常用來(lái)識別域中的一個(gè)特定用戶(hù),位于@前。本地部分也可以用來(lái)識別其他對象,如某個(gè)聊天室。

JID的資源部分通常會(huì )標識一個(gè)特定客戶(hù)端的XMPP連接。對于XMPP客戶(hù)端而言,每個(gè)連接均被指派一個(gè)資源。如darcy@perberley.lit想要連接他的書(shū)法和圖書(shū)館則可以通過(guò)

darcy@perberley.lit/study和darcy@perberley.lit/library來(lái)尋址,這樣避免了用戶(hù)在打開(kāi)多個(gè)鏈接時(shí)消息無(wú)法找到正確的處理器。主要注意的是,資源部分是區分大小寫(xiě)的。

JID劃分為兩種類(lèi)型:

  • ?   裸JID

完整JID去除資源部分的地址,客戶(hù)端的裸JID有些特殊,這是因為服務(wù)器自己將處理發(fā)往客戶(hù)端的裸JID節。裸JID可以視為尋址用戶(hù)的賬戶(hù),而不是客戶(hù)端。

  • ?   完整JID

最為具體的地址

XMPP節

核心XMPP工具集由三個(gè)基本節組成,分別為<presence>、<message>和<iq>

XMPP流由兩份XML文檔組成,通信的每個(gè)方向均有一個(gè)文檔,這些文檔有一個(gè)根元素<stream:stream>,<stream:stream>的子元素由可路由的節以及與流相關(guān)的頂級子元素構成。

<stream:stream>         <iq type=’get’>             <query xmlns=’jabber:iq:roster’ />  //請求自己的花名冊         </iq>         <presence/>  //通知服務(wù)器她已在線(xiàn)并可以訪(fǎng)問(wèn)         <message to=’darcy@pemberley.lit’ from=’elizabaeth@longbourn.lit/ballroom’ type=’chat’>             <body>                   I cannot talk of books in a ball-room; my head is always full of something else.             </body> //發(fā)送消息         </message>         <presence type=’unavailable’> // 聲明自己不可訪(fǎng)問(wèn)并關(guān)閉</stream:stream>

通用屬性

from/to/type/id

from的屬性并非由客戶(hù)端提供,而是服務(wù)端進(jìn)行的標記。

presence節

presence提供網(wǎng)絡(luò )實(shí)體的可訪(fǎng)問(wèn)性。用戶(hù)發(fā)出presence節,表明自己上線(xiàn),這樣可以會(huì )有更大的概率與別人通信(人們更愿意與在線(xiàn)的人交流),但是我們也不用擔心任何人都可以看到自己的在線(xiàn)狀態(tài),除非我們訂閱了該用戶(hù)的狀態(tài),訂閱之后,用戶(hù)的狀態(tài)信息會(huì )自動(dòng)發(fā)送到訂閱者處。

實(shí)際上,XMPP的presence節是一個(gè)簡(jiǎn)單的專(zhuān)用的發(fā)布-訂閱方法。

在IM中,presence體現在花名冊(roster)中,花名冊保存有JID列表以及用戶(hù)與這些JID的訂閱關(guān)系,一旦上線(xiàn),用戶(hù)發(fā)送presence節,剩下的就由服務(wù)器處理了(通知自己在線(xiàn),以及獲取聯(lián)系人的狀態(tài)信息)

message節

用于從一個(gè)實(shí)體向另外一個(gè)實(shí)體發(fā)送消息,并可以傳輸任何類(lèi)型的結構化信息,不保證傳輸可靠性

message是一個(gè)非?;A的推模型,message通常用于IM,groupchat,警告和通知等。

message的type有如下幾種:

  • normal

    類(lèi)似于email,發(fā)出后不等待回應

  • chat

    用于兩個(gè)實(shí)體間的實(shí)時(shí)通信

  • groupchat

    多用戶(hù)聊天室中使用

  • headline

    用于發(fā)送警告或通知

  • error

發(fā)送錯誤信息

<message from=madhatter@wonderland.lit/foo to=alice@wonderland.lit type="chat">  <body>Who are you?</body>  <subject>Query</subject></message>

除了type之外,典型的message節中還包含from、to或者id屬性(用于目的追蹤)。

to中的JID為消息的接受者,from是發(fā)送者的JID,但是from屬性并非由客戶(hù)端提供,而是發(fā)送者的服務(wù)端提供的,以避免地址模仿。

message節中也可以包含未在XMPP協(xié)議中定義的負載,可以用于擴展。

IQ節

表示Info/Query,為XMPP通信提供請求及響應機制,類(lèi)似于GET/POST/PUT方法。

IQ只能包含一個(gè)payload,并且定義了需要由服務(wù)器處理的請求或者動(dòng)作。相對于message來(lái)說(shuō),IQ具有更好的可靠性,因其要求收到回應。

IQ中包含有id屬性,用于識別服務(wù)器發(fā)回的響應。

  • get

    用于請求信息,類(lèi)似于HTTP Get

  • set

    提供信息或請求,類(lèi)似于HTTP POST/PUT

  • result

    響應請求,類(lèi)似于HTTP 200

  • error

    錯誤信息

例子

  • 發(fā)送獲取花名冊請求
<iq from=alice@wonderland.lit/pda id="rr82a1z7" to=alice@wonderland.lit type="get"><query xmlns="jabber:iq:roster"/></iq>
  • 服務(wù)器返回花名冊
<iq from=alice@wonderland.lit id="rr82a1z7" to=alice@wonderland.lit/pda type="result">    <query xmlns="jabber:iq:roster">        <item jid="whiterabbit@wonderland.lit"/>        <item jid="lory@wonderland.lit"/>        <item jid="mouse@wonderland.lit"/>        <item jid="sister@realworld.lit"/>    </query></iq>            
  • 用戶(hù)新增一個(gè)聯(lián)系人
<iq from=alice@wonderland.lit/pda id="ru761vd7" to=alice@wonderland.lit type="set">    <query xmlns="jabber:iq:roster">        <item jid="madhatter@wonderland.lit"/>    </query></iq>
  • 服務(wù)器響應
<iq from=alice@wonderland.lit id="ru761vd7" to=alice@wonderland.lit/pda type="result"/>

error節

具有明確的結構,通常包含原節內容,通用錯誤信息以及應用程序特有的錯誤條件和信息(可選)

可擴展

XMPP協(xié)議是基于XML的協(xié)議,因此其天生提供了很好的可擴展性。我們可以用XMPP傳遞各種信息,包括鏈接、位置信息,Web Service等。

連接生命周期

發(fā)送XMPP節通常需要建立一個(gè)經(jīng)過(guò)身份驗證的XMPP會(huì )話(huà),包括連接、流的建立、身份驗證以及斷開(kāi)連接。

連接

在發(fā)送任何節之前,需要建立XMPP流,在XMPP流存在之前,必須建立通往XMPP服務(wù)器的連接。

當XMPP客戶(hù)端或者服務(wù)器連接到另外一個(gè)XMPP服務(wù)器時(shí),首先要查詢(xún)SRV記錄,該記錄保存有特定域的服務(wù)器列表。查詢(xún)應答中可以包含多條SRV記錄,這樣就可以在多個(gè)服務(wù)器中建立負載均衡連接。

如果沒(méi)有找到合適的SRV記錄,那么程序將試圖直接連接到指定域。

流的建立

?   一旦建立通過(guò)給定XMPP服務(wù)器的連接,XMPP流就啟動(dòng)了

?   向服務(wù)器發(fā)送<stream:stream>,就可以打開(kāi)XMPP流,服務(wù)器發(fā)送響應流的起始標記<stream:stream>進(jìn)行響應

建立XMPP流之后就可以來(lái)回發(fā)送各種元素

?   服務(wù)器發(fā)送<stream:feature>元素,列舉XMPP流中支持所有功能,大多數與可用的加密和身份驗證選型有關(guān)

身份驗證

XMPP允許進(jìn)行TLS(Transport Layer Security,傳輸層安全)加密,而且大多數客戶(hù)端默認使用該功能。

一旦服務(wù)器通告TLS支持后,客戶(hù)端就會(huì )啟動(dòng)TLS連接并將當前套接字升級為加密套接字而不斷開(kāi)連接。一旦TLS加密確立,就會(huì )創(chuàng )建一對新的XMPP流。

XMPP中的身份驗證使用SASL(Simple Authentication and Security Layers,簡(jiǎn)單身份驗證與安全層)協(xié)議并支持多種身份驗證機制(取決于服務(wù)器)。

一旦完成身份驗證,客戶(hù)端必須為連接綁定一個(gè)資源并啟動(dòng)一個(gè)會(huì )話(huà),通過(guò)<bind>和<session>元素發(fā)送。

當兩臺服務(wù)器相互連接時(shí),身份驗證步驟稍稍不同。

連接斷開(kāi)

當用戶(hù)結束XMPP會(huì )話(huà)后,他們終止會(huì )話(huà)并斷開(kāi)連接,最優(yōu)雅的方式是首先發(fā)送無(wú)效出席信息,然后關(guān)閉<stream:stream>元素。

<presence type=’unavailable’></steam:stream>
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
XMPP協(xié)議的原理介紹
XMPP協(xié)議詳解三:即時(shí)消息
XMPP協(xié)議相關(guān)
XMPP協(xié)議服務(wù)器之Ejabberd
Jabber
XMPP協(xié)議學(xué)習筆記
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久