国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
OpenFire源碼學(xué)習(xí)之一:XMPP基礎(chǔ)知識

前面兩張主要講基礎(chǔ)部分。XMPP與Mina有部分抄寫于互聯(lián)網(wǎng)的其他大事

XMPP概述

XMPP: The Extensible Messaging and Presence Protocol

中文全稱:可擴展通訊和表示協(xié)議

Xmpp是一種類似于http的通訊傳輸協(xié)議,它是一個“包裝”/“解包”的過程。

XMPP適合新項目的優(yōu)勢:

l  無需投入成本制定協(xié)議

l  易于擴展

l  可迅速完成原型

l  適合各種容量系統(tǒng),從100用戶在線的系統(tǒng)到100萬以上在線用戶。

l  可擴展至 Web/Flash IM, Mobile IM 等各種場合,基本都有開源實現(xiàn)或Library。

l  發(fā)展比較成熟穩(wěn)定

基本網(wǎng)絡(luò)結(jié)構(gòu)

XMPP中定義了三個角色,客戶端,服務(wù)器,網(wǎng)關(guān)。通信能夠在這三者的任意兩個之間雙向發(fā)生。服務(wù)器同時承擔(dān)了客戶端信息記錄,連接管理和信息的路由功能。網(wǎng)關(guān)承擔(dān)著與異構(gòu)即時通信系統(tǒng)的互聯(lián)互通,異構(gòu)系統(tǒng)可以包括SMS(短信),MSN,ICQ等?;镜木W(wǎng)絡(luò)形式是單客戶端通過TCP/IP連接到單服務(wù)器,然后在之上傳輸XML。

功能

傳輸?shù)氖桥c即時通訊相關(guān)的指令。在以前這些命令要么用2進制的形式發(fā)送(比如QQ),要么用純文本指令加空格加參數(shù)加換行符的方式發(fā)送(比如MSN)。而XMPP傳輸?shù)?span style="color:windowtext">即時通訊指令的邏輯與以往相仿,只是協(xié)議的形式變成了XML格式的純文本。這不但使得解析容易了,人也容易閱讀了,方便了開發(fā)和查錯。而XMPP的核心部分就是一個在網(wǎng)絡(luò)上分片段發(fā)送XML的流協(xié)議。這個流協(xié)議是XMPP的即時通訊指令的傳遞基礎(chǔ),也是一個非常重要的可以被進一步利用的網(wǎng)絡(luò)基礎(chǔ)協(xié)議。所以可以說,XMPP用TCP傳的是XML流。

XML流和XML節(jié)

XML流的定義:

一個XML流是一個容器,包含了兩個實體之間通過網(wǎng)絡(luò)交換的XML元素。一個XML流是由一個XML打開標(biāo)簽 <stream> (包含適當(dāng)?shù)膶傩院兔挚臻g聲明)開始的,流的結(jié)尾則是一個XML關(guān)閉</stream>標(biāo)簽 。在流的整個生命周期,初始化它的實體可以通過流發(fā)送大量的XML元素,用于流的握手(例如 TLS 握手 或 SASL 握手)或XML節(jié)(在這里指符合缺省名字空間的元素,包括<message/>,<presence/>,或 <iq/> 元素)?!俺跏嫉牧鳌庇沙跏蓟瘜嶓w(通常是一個客戶端或服務(wù)器)和接收實體(通常是一個服務(wù)器)握手,從接收實體來看,它就是那個初始實體的"會話"。初始化流允許從初始化實體到接收實體的單向通信;為了使接收實體能夠和初始實體交換信息,接收實體必須發(fā)起一個反向的握手(應(yīng)答流)。

 

XML節(jié)的定義:

 一個XML節(jié)是一個實體通過 XML 流向另一個實體發(fā)送的結(jié)構(gòu)化信息中的一個離散的語義單位。一個XML節(jié)直接存在于根元素<stream/>的下一級,這樣可以說是很好的匹配 了[XML]。任何XML節(jié)都是從一個XML流的下一級的某個打開標(biāo)簽(如 <presence>)開始,到相應(yīng)的關(guān)閉標(biāo)簽(如 </presence>)。一個XML節(jié)可以包含子元素(相關(guān)的屬性、元素、和 XML 字符數(shù)據(jù)等) 以表達(dá)完整的信息。在這里定義的XML節(jié)僅限于<message/>,<presence/>,和 <iq/> 元素。

stream 屬性

 

初始化方發(fā)給接收方

接收方發(fā)給初始化方

說明

to

接收方的主機名

忽略

該屬性僅出現(xiàn)在初始化實體發(fā)給接收實體的 XML流的頭當(dāng)中,并且它的值必須是接收實體所在的主機名。若 'to' 屬性出現(xiàn)在應(yīng)答流中,則初始化實體忽略它。

from

忽略

發(fā)送方的主機名

該屬性僅出現(xiàn)在接收實體發(fā)給初始化實體的 XML流的頭當(dāng)中,并且它的值必須是為當(dāng)前初始化實體授權(quán)的接收實體所在的主機名。

id

忽略

會話鍵值

該屬性僅用于接收實體發(fā)送給初始化實體 XML流的頭。這個屬性是一個由接收實體創(chuàng)建的具有唯一性的ID,一個初始實體和接收實體之間的會話ID,并且它在接收方的應(yīng)用程序中必須是唯一的。注意:這個流 ID必須是足夠安全的,所以它必須是不可預(yù)知的和不可重復(fù)的。它不應(yīng)該在有 'id'屬性出現(xiàn)在初始實體發(fā)送給接收實體的 XML流的頭中;無論如何,如果'id'屬性出現(xiàn)在初始化流中,接收實體應(yīng)該忽略它。

xml:lang

缺省語言

缺省語言

它包含在初始化實體發(fā)給接收實體的 XML流的頭中,以指定在流中傳輸?shù)目勺xXML字符所使用的缺省語言。如果這個屬性出現(xiàn)了,接收實體應(yīng)該記住它的值,作為初始化流和應(yīng)答流的缺省屬性;如果這個屬性沒有出現(xiàn),接收實體應(yīng)該用一個可配置的缺省值用于雙方的流,這個屬性值必須在應(yīng)答流的頭中傳達(dá)。對于所有初始化流中傳輸?shù)墓?jié),如果初始實體沒有提供'xml:lang'屬性,接收實體應(yīng)該應(yīng)用缺省值;如果初始實體提供了'xml:lang'屬性,接收實體不能修改或刪除它。'xml:lang'屬性的值必須是一個 nmtoken并且必須遵守RFC3066規(guī)定的格式。

version

支持XMPP 1.0

支持XMPP 1.0

 

示例:

<?xml version='1.0'?>

<stream:stream

           from='test@montenets.com'

           to='im.example.com'

           version='1.0'

           xml:lang='en'

   xmlns='jabber:client'

   xmlns:stream='http://etherx.jabber.org/streams'>

基本節(jié)點

<presence>節(jié)點

presence節(jié)點用來控制和表示實體的在線狀態(tài),可以展示從離線到在線甚至于離開,不能打擾等復(fù)雜狀態(tài),另外,還能被用來建立和結(jié)束在線狀態(tài)的訂閱。

<presence>
       <show>away</show> <!--離線-->
      <status>atthe ball</status> <!--標(biāo)簽用于顯示額外信息-->
</presence>

其中show的取值范圍如下:
away:  離線
char:   交談中
dnd:    希望不被打擾
xa:     離開一段時間

Online: 在線

<presence>
       <status>touring thecountryside</status>
      <priority>10</priority>
</presence>

在這個節(jié)中,出現(xiàn)了一個<priority>標(biāo)簽,表示現(xiàn)在連接的優(yōu)先度。每個連接可以設(shè)置從-128到127的優(yōu)先讀,默認(rèn)是設(shè)置為0.用戶可以在這個標(biāo)簽里修改相應(yīng)的優(yōu)先度。如果有相應(yīng)的設(shè)置的話,用戶送往純JID的將會送 到優(yōu)先度最高的那個連接,如果設(shè)置值為負(fù)數(shù)的話,則表示送往純JID的消息將永遠(yuǎn)不會送達(dá)該連接。

 

<Message>節(jié)點

message節(jié)點用于用戶之間傳遞消息。這消息可以是單純的聊天信息,也可以某種格式化的信息。 message節(jié)點信息是傳遞之后就被忘記的。當(dāng)消息被送出之后,發(fā)送者是不管這個消息是否已經(jīng)送出或者什么時候被接收到。通過擴展協(xié)議,可以改變這樣一種狀況。

 下面我們看一些例子:
<messagefrom="test_a@jabber.org"  to="test_b@jabber.org"  type="chat">
      <body>Hello!</body>
</message>

 

<message from="test_a@jabber.org"  to="test_b@jabber.org"  type="groupchat">
       <body>welcome</body>
</message>

其中<type>標(biāo)簽取值類型:

Chat:           單點聊天

Error:          錯誤信息 
groupchat:    多人聊天信息
headline:      通常用在自動服務(wù)中,不需要回應(yīng)。

<body>          標(biāo)簽里面是具體的消息內(nèi)容。

 

<iq>節(jié)點

iq節(jié)點主要是用于Info/Query模式的消息請求,他和Http協(xié)議比較相似??梢园l(fā)出get以及set請求,就如同http中的GET以及POST。iq節(jié)點需要有回應(yīng),有g(shù)et,set兩種請求以及result,error兩種回應(yīng)。

<iq  from="test_a@jabber.org"  type="get"  id="roster1">
             <queryxmlns="jabber:iq:roster"/>
       </iq>

其中type屬性取值:

Get:       獲取當(dāng)前域值

Set:       設(shè)置替換get查詢的值

Result:   說明成功相應(yīng)了先前的查詢

Error:    查詢或相應(yīng)時候出現(xiàn)了錯誤

 

拓展協(xié)議





本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
XMPP協(xié)議簡介
XMPP基本概念
Openfire與XMPP協(xié)議
XMPP協(xié)議的原理介紹
XMPP 協(xié)議適合用來做移動 IM 么
基于XMPP的即時通信系統(tǒng)的建立
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服