基于XMPP的即時(shí)通信系統(tǒng)的建立(二)— XMPP詳解

不好意思氢惋,內(nèi)附一些swift的東西地址:https://github.com/tanzhiwen/SwiftTips

XMPP詳解(http://www.cnblogs.com/jiyuqi/tag/xmpp/)

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

XMPP由幾個(gè)小的構(gòu)造塊組成周瞎,并在此基礎(chǔ)上擴(kuò)展出了更多的構(gòu)造塊苗缩。XMPP中有眾多系統(tǒng):發(fā)布-訂閱服務(wù)、多人聊天声诸、表單檢索與處理酱讶、服務(wù)發(fā)現(xiàn)、實(shí)時(shí)數(shù)據(jù)傳輸彼乌、隱私處理及遠(yuǎn)程過(guò)程調(diào)用等泻肯。

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

什么是XMPP

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

在XMPP上交換的是XML數(shù)據(jù),采用這種格式墅垮,使XMPP協(xié)議獲得了極大的可擴(kuò)展性惕医,因?yàn)槭褂肵ML可以方便的新增功能并保證前后向兼容。使用XML較二進(jìn)制協(xié)議占用更大的帶寬算色,但獲得的優(yōu)勢(shì)是具有了幾乎無(wú)限的可擴(kuò)展性抬伺。

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

在XMPP中灾梦,XML數(shù)據(jù)被組織為了一對(duì)流峡钓,每個(gè)流分別對(duì)應(yīng)通信的一個(gè)方向齐鲤。每個(gè)XML流均由一個(gè)開(kāi)始元素、后跟XMPP節(jié)和其他頂級(jí)元素椒楣,然后是一個(gè)結(jié)束元素組成给郊。每個(gè)XMPP節(jié)(可帶有子元素及屬性)均是該流的一級(jí)子元素。在XMPP連接末尾捧灰,這兩個(gè)流形成了一對(duì)有效的XMPP文檔淆九。

XMPP節(jié)構(gòu)成了該協(xié)議的核心部分,而XMPP應(yīng)用程序則關(guān)注如何發(fā)送和響應(yīng)各種類(lèi)型的節(jié)毛俏。節(jié)可能包含網(wǎng)絡(luò)上其他實(shí)體的信息炭庙、類(lèi)似于電子郵件的個(gè)人消息或?yàn)橛?jì)算機(jī)處理而設(shè)計(jì)的結(jié)構(gòu)化數(shù)據(jù)。what think you of books在一個(gè)典型的XMPP會(huì)話中煌寇,一個(gè)上述的節(jié)將會(huì)從darcy的XMPP客戶(hù)端發(fā)送到她的XMPP服務(wù)器焕蹄,她的服務(wù)器將會(huì)注意到該節(jié)的目的地是某個(gè)遠(yuǎn)程服務(wù)器上的一個(gè)實(shí)體,因此與該遠(yuǎn)程服務(wù)器先建立XMPP連接阀溶,并將消息轉(zhuǎn)發(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)單身份驗(yàn)證與安全層)實(shí)現(xiàn)身份驗(yàn)證機(jī)制更振。

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

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è)中轉(zhuǎn)服務(wù)器,XMPP保存完整的列表睡汹。

服務(wù)器

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

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

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

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

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

客戶(hù)端

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

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

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

組件

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

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

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

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

服務(wù)器還允許組件在內(nèi)部自行路由或管理節(jié)俭正,因而更為靈活奸鬓。


插件

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

插件一般是綁定特定類(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è)部分組成肾请,節(jié)點(diǎn)留搔、域和資源,域是必須的铛铁,其他兩個(gè)部分是可選的隔显。

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

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

JID的資源部分通常會(huì)標(biāo)識(shí)一個(gè)特定客戶(hù)端的XMPP連接。對(duì)于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ú)法找到正確的處理器抱婉。主要注意的是档叔,資源部分是區(qū)分大小寫(xiě)的。

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

?? 裸JID

完整JID去除資源部分的地址蒸绩,客戶(hù)端的裸JID有些特殊衙四,這是因?yàn)榉?wù)器自己將處理發(fā)往客戶(hù)端的裸JID節(jié)。裸JID可以視為尋址用戶(hù)的賬戶(hù)患亿,而不是客戶(hù)端传蹈。

?? 完整JID

最為具體的地址

XMPP節(jié)核心XMPP工具集由三個(gè)基本節(jié)組成,分別為步藕、和XMPP流由兩份XML文檔組成惦界,通信的每個(gè)方向均有一個(gè)文檔,這些文檔有一個(gè)根元素咙冗,的子元素由可路由的節(jié)以及與流相關(guān)的頂級(jí)子元素構(gòu)成沾歪。復(fù)制代碼//請(qǐng)求自己的花名冊(cè)//通知服務(wù)器她已在線并可以訪問(wèn)I cannot talk of books in a ball-room; my head is always full of something else.

//發(fā)送消息// 聲明自己不可訪問(wèn)并關(guān)閉復(fù)制代碼通用屬性from/to/type/idfrom的屬性并非由客戶(hù)端提供,而是服務(wù)端進(jìn)行的標(biāo)記雾消。presence節(jié)presence提供網(wǎng)絡(luò)實(shí)體的可訪問(wèn)性灾搏。用戶(hù)發(fā)出presence節(jié),表明自己上線立润,這樣可以會(huì)有更大的概率與別人通信(人們更愿意與在線的人交流)狂窑,但是我們也不用擔(dān)心任何人都可以看到自己的在線狀態(tài),除非我們訂閱了該用戶(hù)的狀態(tài)范删,訂閱之后蕾域,用戶(hù)的狀態(tài)信息會(huì)自動(dòng)發(fā)送到訂閱者處。實(shí)際上到旦,XMPP的presence節(jié)是一個(gè)簡(jiǎn)單的專(zhuān)用的發(fā)布-訂閱方法旨巷。在IM中,presence體現(xiàn)在花名冊(cè)(roster)中添忘,花名冊(cè)保存有JID列表以及用戶(hù)與這些JID的訂閱關(guān)系采呐,一旦上線,用戶(hù)發(fā)送presence節(jié)搁骑,剩下的就由服務(wù)器處理了(通知自己在線斧吐,以及獲取聯(lián)系人的狀態(tài)信息)message節(jié)用于從一個(gè)實(shí)體向另外一個(gè)實(shí)體發(fā)送消息,并可以傳輸任何類(lèi)型的結(jié)構(gòu)化信息仲器,不保證傳輸可靠性message是一個(gè)非趁郝剩基礎(chǔ)的推模型,message通常用于IM乏冀,groupchat蝶糯,警告和通知等。message的type有如下幾種:normal    類(lèi)似于email辆沦,發(fā)出后不等待回應(yīng)chat    用于兩個(gè)實(shí)體間的實(shí)時(shí)通信groupchat    多用戶(hù)聊天室中使用headline    用于發(fā)送警告或通知error發(fā)送錯(cuò)誤信息Who are you?Query除了type之外昼捍,典型的message節(jié)中還包含from、to或者id屬性(用于目的追蹤)肢扯。to中的JID為消息的接受者妒茬,from是發(fā)送者的JID,但是from屬性并非由客戶(hù)端提供蔚晨,而是發(fā)送者的服務(wù)端提供的乍钻,以避免地址模仿。message節(jié)中也可以包含未在XMPP協(xié)議中定義的負(fù)載铭腕,可以用于擴(kuò)展银择。IQ節(jié)表示Info/Query,為XMPP通信提供請(qǐng)求及響應(yīng)機(jī)制谨履,類(lèi)似于GET/POST/PUT方法欢摄。IQ只能包含一個(gè)payload,并且定義了需要由服務(wù)器處理的請(qǐng)求或者動(dòng)作笋粟。相對(duì)于message來(lái)說(shuō)怀挠,IQ具有更好的可靠性,因其要求收到回應(yīng)害捕。IQ中包含有id屬性绿淋,用于識(shí)別服務(wù)器發(fā)回的響應(yīng)。get    用于請(qǐng)求信息尝盼,類(lèi)似于HTTP Getset    提供信息或請(qǐng)求吞滞,類(lèi)似于HTTP POST/PUTresult    響應(yīng)請(qǐng)求,類(lèi)似于HTTP 200error    錯(cuò)誤信息例子發(fā)送獲取花名冊(cè)請(qǐng)求服務(wù)器返回花名冊(cè)復(fù)制代碼復(fù)制代碼用戶(hù)新增一個(gè)聯(lián)系人服務(wù)器響應(yīng)error節(jié)具有明確的結(jié)構(gòu),通常包含原節(jié)內(nèi)容裁赠,通用錯(cuò)誤信息以及應(yīng)用程序特有的錯(cuò)誤條件和信息(可選)可擴(kuò)展XMPP協(xié)議是基于XML的協(xié)議殿漠,因此其天生提供了很好的可擴(kuò)展性。我們可以用XMPP傳遞各種信息佩捞,包括鏈接绞幌、位置信息,Web Service等一忱。連接生命周期發(fā)送XMPP節(jié)通常需要建立一個(gè)經(jīng)過(guò)身份驗(yàn)證的XMPP會(huì)話莲蜘,包括連接、流的建立帘营、身份驗(yàn)證以及斷開(kāi)連接票渠。連接在發(fā)送任何節(jié)之前,需要建立XMPP流芬迄,在XMPP流存在之前问顷,必須建立通往XMPP服務(wù)器的連接。當(dāng)XMPP客戶(hù)端或者服務(wù)器連接到另外一個(gè)XMPP服務(wù)器時(shí)薯鼠,首先要查詢(xún)SRV記錄择诈,該記錄保存有特定域的服務(wù)器列表。查詢(xún)應(yīng)答中可以包含多條SRV記錄出皇,這樣就可以在多個(gè)服務(wù)器中建立負(fù)載均衡連接羞芍。如果沒(méi)有找到合適的SRV記錄,那么程序?qū)⒃噲D直接連接到指定域郊艘。流的建立?? 一旦建立通過(guò)給定XMPP服務(wù)器的連接荷科,XMPP流就啟動(dòng)了?? 向服務(wù)器發(fā)送,就可以打開(kāi)XMPP流纱注,服務(wù)器發(fā)送響應(yīng)流的起始標(biāo)記進(jìn)行響應(yīng)建立XMPP流之后就可以來(lái)回發(fā)送各種元素?? 服務(wù)器發(fā)送元素畏浆,列舉XMPP流中支持所有功能,大多數(shù)與可用的加密和身份驗(yàn)證選型有關(guān)身份驗(yàn)證XMPP允許進(jìn)行TLS(Transport Layer Security狞贱,傳輸層安全)加密刻获,而且大多數(shù)客戶(hù)端默認(rèn)使用該功能。一旦服務(wù)器通告TLS支持后瞎嬉,客戶(hù)端就會(huì)啟動(dòng)TLS連接并將當(dāng)前套接字升級(jí)為加密套接字而不斷開(kāi)連接蝎毡。一旦TLS加密確立,就會(huì)創(chuàng)建一對(duì)新的XMPP流氧枣。XMPP中的身份驗(yàn)證使用SASL(Simple Authentication and Security Layers沐兵,簡(jiǎn)單身份驗(yàn)證與安全層)協(xié)議并支持多種身份驗(yàn)證機(jī)制(取決于服務(wù)器)。一旦完成身份驗(yàn)證便监,客戶(hù)端必須為連接綁定一個(gè)資源并啟動(dòng)一個(gè)會(huì)話扎谎,通過(guò)和元素發(fā)送。當(dāng)兩臺(tái)服務(wù)器相互連接時(shí),身份驗(yàn)證步驟稍稍不同毁靶。連接斷開(kāi)當(dāng)用戶(hù)結(jié)束XMPP會(huì)話后胧奔,他們終止會(huì)話并斷開(kāi)連接,最優(yōu)雅的方式是首先發(fā)送無(wú)效出席信息老充,然后關(guān)閉元素葡盗。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末螟左,一起剝皮案震驚了整個(gè)濱河市啡浊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌胶背,老刑警劉巖巷嚣,帶你破解...
    沈念sama閱讀 216,843評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異钳吟,居然都是意外死亡廷粒,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)红且,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)坝茎,“玉大人,你說(shuō)我怎么就攤上這事暇番∴头牛” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,187評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵壁酬,是天一觀的道長(zhǎng)次酌。 經(jīng)常有香客問(wèn)我,道長(zhǎng)舆乔,這世上最難降的妖魔是什么岳服? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,264評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮希俩,結(jié)果婚禮上吊宋,老公的妹妹穿的比我還像新娘。我一直安慰自己颜武,他們只是感情好璃搜,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著盒刚,像睡著了一般腺劣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上因块,一...
    開(kāi)封第一講書(shū)人閱讀 51,231評(píng)論 1 299
  • 那天橘原,我揣著相機(jī)與錄音,去河邊找鬼。 笑死趾断,一個(gè)胖子當(dāng)著我的面吹牛拒名,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播芋酌,決...
    沈念sama閱讀 40,116評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼增显,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了脐帝?” 一聲冷哼從身側(cè)響起同云,我...
    開(kāi)封第一講書(shū)人閱讀 38,945評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎堵腹,沒(méi)想到半個(gè)月后炸站,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,367評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡疚顷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評(píng)論 2 333
  • 正文 我和宋清朗相戀三年旱易,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腿堤。...
    茶點(diǎn)故事閱讀 39,754評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡阀坏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出笆檀,到底是詐尸還是另有隱情忌堂,我是刑警寧澤,帶...
    沈念sama閱讀 35,458評(píng)論 5 344
  • 正文 年R本政府宣布误债,位于F島的核電站浸船,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏寝蹈。R本人自食惡果不足惜李命,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望箫老。 院中可真熱鬧封字,春花似錦、人聲如沸耍鬓。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,692評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)牲蜀。三九已至笆制,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間涣达,已是汗流浹背在辆。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,842評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工证薇, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人匆篓。 一個(gè)月前我還...
    沈念sama閱讀 47,797評(píng)論 2 369
  • 正文 我出身青樓浑度,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親鸦概。 傳聞我的和親對(duì)象是個(gè)殘疾皇子箩张,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 關(guān)于XMPP最權(quán)威的講解:http://www.jabbercn.org/RFC3920(這個(gè)才是最權(quán)威的,下面文...
    隨風(fēng)飄蕩的小逗逼閱讀 1,487評(píng)論 1 5
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理窗市,服務(wù)發(fā)現(xiàn)先慷,斷路器,智...
    卡卡羅2017閱讀 134,652評(píng)論 18 139
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 10,965評(píng)論 6 13
  • XMPP使用 : http://blog.csdn.net/liuhongwei123888/article/de...
    shenchao123444閱讀 1,267評(píng)論 1 2
  • 前面關(guān)于即時(shí)通訊基礎(chǔ)Socket,大家學(xué)習(xí)使用XMPP之前可以先看看即時(shí)通訊系列之Socket簡(jiǎn)介 前言 前段時(shí)間...
    音符上的碼字員閱讀 4,229評(píng)論 3 16