(四)即時(shí)通訊系列之XMPP簡(jiǎn)介

前面關(guān)于即時(shí)通訊基礎(chǔ)Socket,大家學(xué)習(xí)使用XMPP之前可以先看看
即時(shí)通訊系列之Socket簡(jiǎn)介

前言

前段時(shí)間使用XMPPFramework完成了一個(gè)仿微信的小項(xiàng)目,故特此來(lái)記錄下即時(shí)通訊開(kāi)發(fā)過(guò)程中的知識(shí)點(diǎn)以及存在一些問(wèn)題,歡迎大家前來(lái)指教.
關(guān)于仿微信的demo在后面的篇章中會(huì)有g(shù)ithub地址,請(qǐng)關(guān)注.

本篇是關(guān)于XMPP的相關(guān)介紹

1.為什么選擇XMPP協(xié)議

在IETF 中,把IM協(xié)議劃分為四種協(xié)議,即即時(shí)信息和出席協(xié)議(Instant Messaging and Presence Protocol, IMPP)访惜、出席和即時(shí)信息協(xié)議(Presence and Instant Messaging Protocol, PRIM)陈辱、針對(duì)即時(shí)信息和出席擴(kuò)展的會(huì)話發(fā)起協(xié)議(Session Initiation Protocol for Instant Messaging and Presence Leveraging Extensions, SIMPLE)褂微,以及可擴(kuò)展的消息出席協(xié)議(XMPP)

XMPP協(xié)議的前身是Jabber箫章,我們采取XMPP協(xié)議主來(lái)實(shí)現(xiàn)IM主要是考慮XMPP協(xié)議是以XML為基礎(chǔ)的诊笤,它繼承了在XML環(huán)境中靈活的發(fā)展性美侦。這表明XMPP是可擴(kuò)展的产舞,所以XMPP信息不僅可以是簡(jiǎn)單的文本,而且可以攜帶復(fù)雜的數(shù)據(jù)和各種格式的文件

  • 1.XMPP 協(xié)議是公開(kāi)的菠剩,由JSF開(kāi)源社區(qū)組織開(kāi)發(fā)的易猫。XMPP 協(xié)議并不屬于任何的機(jī)構(gòu)和個(gè)人,而是屬于整個(gè)社區(qū)具壮,這一點(diǎn)從根本上保證了其開(kāi)放性准颓。

  • 2.XMPP 協(xié)議具有良好的擴(kuò)展性。在XMPP 中棺妓,即時(shí)消息和到場(chǎng)信息都是基于XML 的結(jié)構(gòu)化信息攘已,這些信息以XML 節(jié)(XML Stanza)的形式在通信實(shí)體間交換。XMPP 發(fā)揮了XML 結(jié)構(gòu)化數(shù)據(jù)的通用傳輸層的作用怜跑,它將出席和上下文敏感信息嵌入到XML 結(jié)構(gòu)化數(shù)據(jù)中样勃,從而使數(shù)據(jù)以極高的效率傳送給最合適的資源⌒苑遥基于XML 建立起來(lái)的應(yīng)用具有良好的語(yǔ)義完整性和擴(kuò)展性峡眶。

  • 3.分布式的網(wǎng)絡(luò)架構(gòu)。XMPP 協(xié)議都是基于Client/Server 架構(gòu)植锉,但是XMPP協(xié)議本身并沒(méi)有這樣的限制辫樱。網(wǎng)絡(luò)的架構(gòu)和電子郵件十分相似,但沒(méi)有結(jié)合任何特定的網(wǎng)絡(luò)架構(gòu)汽煮,適用范圍非常廣泛搏熄。

  • 4.XMPP 具有很好的彈性棚唆。XMPP 除了可用在即時(shí)通信的應(yīng)用程序,還能用在網(wǎng)絡(luò)管理心例、內(nèi)容供稿宵凌、協(xié)同工具、檔案共享止后、游戲瞎惫、遠(yuǎn)端系統(tǒng)監(jiān)控等。

  • 5.安全性译株。XMPP在Client-to-Server通信瓜喇,和Server-to-Server通信中都使用TLS (Transport Layer Security)協(xié)議作為通信通道的加密方法,保證通信的安全歉糜。任何XMPP服務(wù)器可以獨(dú)立于公眾XMPP網(wǎng)絡(luò)(例如在企業(yè)內(nèi)部網(wǎng)絡(luò)中)乘寒,而使用SASL及TLS等技術(shù)更加增強(qiáng)了通信的安全性。如下圖所示:

.png

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

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

XMPP是一個(gè)典型的C/S架構(gòu)匪补,而不是像大多數(shù)即時(shí)通訊軟件一樣伞辛,使用P2P客戶端到客戶端的架構(gòu),也就是說(shuō)在大多數(shù)情況下夯缺,當(dāng)兩個(gè)客戶端進(jìn)行通訊時(shí)蚤氏,他們的消息都是通過(guò)服務(wù)器傳遞的(也有例外,例如在兩個(gè)客戶端傳輸文件時(shí)).采用這種架構(gòu)踊兜,主要是為了簡(jiǎn)化客戶端竿滨,將大多數(shù)工作放在服務(wù)器端進(jìn)行,這樣捏境,客戶端的工作就比較簡(jiǎn)單于游,而且,當(dāng)增加功能時(shí)典蝌,多數(shù)是在服務(wù)器端進(jìn)行.XMPP服務(wù)的框架結(jié)構(gòu)如下圖所示.XMPP中定義了三個(gè)角色曙砂,XMPP客戶端,XMPP服務(wù)器骏掀、網(wǎng)關(guān).通信能夠在這三者的任意兩個(gè)之間雙向發(fā)生.服務(wù)器同時(shí)承擔(dān)了客戶端信息記錄鸠澈、連接管理和信息的路由功能.網(wǎng)關(guān)承擔(dān)著與異構(gòu)即時(shí)通信系統(tǒng)的互聯(lián)互通,異構(gòu)系統(tǒng)可以包括SMS(短信)截驮、MSN笑陈、ICQ等.基本的網(wǎng)絡(luò)形式是單客戶端通過(guò)TCP/IP連接到單服務(wù)器,然后在之上傳輸XML葵袭,工作原理是:

(1)節(jié)點(diǎn)連接到服務(wù)器涵妥;
(2)服務(wù)器利用本地目錄系統(tǒng)中的證書對(duì)其認(rèn)證;
(3)節(jié)點(diǎn)指定目標(biāo)地址坡锡,讓服務(wù)器告知目標(biāo)狀態(tài)蓬网;
(4)服務(wù)器查找窒所、連接并進(jìn)行相互認(rèn)證;
(5)節(jié)點(diǎn)之間進(jìn)行交互.

3.XMPP客戶端

XMPP 系統(tǒng)的一個(gè)設(shè)計(jì)標(biāo)準(zhǔn)是必須支持簡(jiǎn)單的客戶端帆锋。事實(shí)上吵取,XMPP 系統(tǒng)架構(gòu)對(duì)客戶端只有很少的幾個(gè)限制。一個(gè)XMPP 客戶端必須支持的功能有:

  1. 通過(guò) TCP 套接字與XMPP 服務(wù)器進(jìn)行通信锯厢;

  2. 解析組織好的 XML 信息包皮官;

  3. 理解消息數(shù)據(jù)類型。

XMPP 將復(fù)雜性從客戶端轉(zhuǎn)移到服務(wù)器端实辑。這使得客戶端編寫變得非常容易捺氢,更新系統(tǒng)功能也同樣變得容易。XMPP 客戶端與服務(wù)端通過(guò)XML 在TCP 套接字的5222 端口進(jìn)行通信剪撬,而不需要客戶端之間直接進(jìn)行通信摄乒。

基本的XMPP 客戶端必須實(shí)現(xiàn)以下標(biāo)準(zhǔn)協(xié)議(XEP-0211):

RFC3920 核心協(xié)議Core

RFC3921 即時(shí)消息和出席協(xié)議Instant Messaging and Presence

XEP-0030 服務(wù)發(fā)現(xiàn)Service Discovery

XEP-0115 實(shí)體能力Entity Capabilities

4.XMPP服務(wù)器

XMPP 服務(wù)器遵循兩個(gè)主要法則:

l 監(jiān)聽(tīng)客戶端連接,并直接與客戶端應(yīng)用程序通信婿奔;

l 與其他 XMPP 服務(wù)器通信缺狠;

XMPP開(kāi)源服務(wù)器一般被設(shè)計(jì)成模塊化,由各個(gè)不同的代碼包構(gòu)成萍摊,這些代碼包分別處理Session管理、用戶和服務(wù)器之間的通信如叼、服務(wù)器之間的通信冰木、DNS(Domain Name System)轉(zhuǎn)換、存儲(chǔ)用戶的個(gè)人信息和朋友名單笼恰、保留用戶在下線時(shí)收到的信息踊沸、用戶注冊(cè)、用戶的身份和權(quán)限認(rèn)證社证、根據(jù)用戶的要求過(guò)濾信息和系統(tǒng)記錄等逼龟。另外,服務(wù)器可以通過(guò)附加服務(wù)來(lái)進(jìn)行擴(kuò)展追葡,如完整的安全策略腺律,允許服務(wù)器組件的連接或客戶端選擇臭觉,通向其他消息系統(tǒng)的網(wǎng)關(guān)千劈。

基本的XMPP 服務(wù)器必須實(shí)現(xiàn)以下標(biāo)準(zhǔn)協(xié)議

RFC3920 核心協(xié)議Core

RFC3921 即時(shí)消息和出席協(xié)議Instant Messaging and Presence

XEP-0030 服務(wù)發(fā)現(xiàn)Service Discovery

5.XMPP網(wǎng)關(guān)

XMPP 突出的特點(diǎn)是可以和其他即時(shí)通信系統(tǒng)交換信息和用戶在線狀況婉弹。由于協(xié)議不同归斤,XMPP 和其他系統(tǒng)交換信息必須通過(guò)協(xié)議的轉(zhuǎn)換來(lái)實(shí)現(xiàn)辅愿,目前幾種主流即時(shí)通信協(xié)議都沒(méi)有公開(kāi)姐叁,所以XMPP 服務(wù)器本身并沒(méi)有實(shí)現(xiàn)和其他協(xié)議的轉(zhuǎn)換潘悼,但它的架構(gòu)允許轉(zhuǎn)換的實(shí)現(xiàn)庞萍。實(shí)現(xiàn)這個(gè)特殊功能的服務(wù)端在XMPP 架構(gòu)里叫做網(wǎng)關(guān)(gateway)遣铝。目前佑刷,XMPP 實(shí)現(xiàn)了和AIM莉擒、ICQ、IRC瘫絮、MSN Massager啰劲、RSS0.9 和Yahoo Massager 的協(xié)議轉(zhuǎn)換。由于網(wǎng)關(guān)的存在檀何,XMPP 架構(gòu)事實(shí)上兼容所有其他即時(shí)通信網(wǎng)絡(luò)蝇裤,這無(wú)疑大大提高了XMPP 的靈活性和可擴(kuò)展性。

6.服務(wù)器端介紹

6.1 什么是Openfire

Openfire 采用Java開(kāi)發(fā)频鉴,開(kāi)源的實(shí)時(shí)協(xié)作(RTC)服務(wù)器基于XMPP(Jabber)協(xié)議栓辜。您可以使用它輕易的構(gòu)建高效率的即時(shí)通信服務(wù)器.

Openfire安裝和使用都非常簡(jiǎn)單,并利用Web進(jìn)行管理垛孔。單臺(tái)服務(wù)器可支持上萬(wàn)并發(fā)用戶藕甩。

由于是采用開(kāi)放的XMPP協(xié)議,您可以使用各種支持XMPP協(xié)議的IM客戶端軟件登陸服務(wù).

6.2為什么使用Openfire

A周荐、Openfire為Java開(kāi)源項(xiàng)目

B狭莱、 采用開(kāi)放的XMPP協(xié)議

C、 有多種針對(duì)不通系統(tǒng)的版本

D概作、使用Socket通訊

E腋妙、 單臺(tái)服務(wù)器可支持上萬(wàn)并發(fā)用戶,搭建分布式云服務(wù)器可輕松提供大量并發(fā)用戶。

F讯榕、 Socket長(zhǎng)連接

G骤素、服務(wù)器穩(wěn)定

H、提供接口愚屁,可自己開(kāi)發(fā)插件

7.XMPP協(xié)議的組成

RFC 3920 XMPP:核心济竹。定義了XMPP 協(xié)議框架下應(yīng)用的網(wǎng)絡(luò)架構(gòu),引入了XML Stream(XML 流)與XML Stanza(XML 節(jié))霎槐,并規(guī)定XMPP 協(xié)議在通信過(guò)程中使用的XML 標(biāo)簽送浊。使用XML 標(biāo)簽從根本上說(shuō)是協(xié)議開(kāi)放性與擴(kuò)展性的需要。此外丘跌,在通信的安全方面袭景,把TLS 安全傳輸機(jī)制與SASL 認(rèn)證機(jī)制引入到內(nèi)核,與XMPP 進(jìn)行無(wú)縫的連接碍岔,為協(xié)議的安全性浴讯、可靠性奠定了基礎(chǔ)。Core 文檔還規(guī)定了錯(cuò)誤的定義及處理蔼啦、XML 的使用規(guī)范榆纽、JID(Jabber Identifier,Jabber 標(biāo)識(shí)符)的定義、命名規(guī)范等等奈籽。所以這是所有基于XMPP 協(xié)議的應(yīng)用都必需支持的文檔饥侵。

RFC 3921:用戶成功登陸到服務(wù)器之后,發(fā)布更新自己的在線好友管理衣屏、發(fā)送即時(shí)聊天消息等業(yè)務(wù)躏升。所有的這些業(yè)務(wù)都是通過(guò)三種基本的XML 節(jié)來(lái)完成的:IQ Stanza(IQ 節(jié)), Presence Stanza(Presence 節(jié)), Message Stanza(Message 節(jié))。RFC3921 還對(duì)阻塞策略進(jìn)行了定義狼忱,定義是多種阻塞方式膨疏。可以說(shuō)钻弄,RFC3921 是RFC3920 的充分補(bǔ)充佃却。兩個(gè)文檔結(jié)合起來(lái),就形成了一個(gè)基本的即時(shí)通信協(xié)議平臺(tái)窘俺,在這個(gè)平臺(tái)上可以開(kāi)發(fā)出各種各樣的應(yīng)用饲帅。

XEP-0030 服務(wù)搜索。一個(gè)強(qiáng)大的用來(lái)測(cè)定XMPP 網(wǎng)絡(luò)中的其它實(shí)體所支持特性的協(xié)議瘤泪。

XEP-0115 實(shí)體性能灶泵。XEP-0030 的一個(gè)通過(guò)即時(shí)出席的定制,可以實(shí)時(shí)改變交變廣告功能对途。

XEP-0045 多人聊天赦邻。一組定義參與和管理多用戶聊天室的協(xié)議,類似于Internet 的Relay Chat掀宋,具有很高的安全性深纲。

XEP-0096 文件傳輸。定義了從一個(gè)XMPP 實(shí)體到另一個(gè)的文件傳輸劲妙。

XEP-0124 HTTP 綁定。將XMPP 綁定到HTTP 而不是TCP儒喊,主要用于不能夠持久的維持與服務(wù)器TCP 連接的設(shè)備镣奋。

XEP-0166 Jingle。規(guī)定了多媒體通信協(xié)商的整體架構(gòu)怀愧。

XEP-0167 Jingle Audio Content Description Format侨颈。定義了從一個(gè)XMPP 實(shí)體到另一個(gè)的語(yǔ)音傳輸過(guò)程。

XEP-0176 Jingle ICE(Interactive Connectivity Establishment)Transport芯义。ICE傳輸機(jī)制哈垢,文件解決了如何讓防火墻或是NAT(Network Address Translation)保護(hù)下的實(shí)體建立連接的問(wèn)題。

XEP-0177 Jingle Raw UDP Transport扛拨。純UDP 傳輸機(jī)制耘分,文件講述了如何在沒(méi)有防火墻且在同一網(wǎng)絡(luò)下建立連接的。

XEP-0180 Jingle Video Content Description Format。定義了從一個(gè)XMPP 實(shí)體到另一個(gè)的視頻傳輸過(guò)程求泰。

XEP-0181 Jingle DTMF(Dual Tone Multi-Frequency)央渣。

XEP-0183 Jingle Telepathy Transport Method。

8.XMPP地址格式

一個(gè)實(shí)體在XMPP網(wǎng)絡(luò)結(jié)構(gòu)中被稱為一個(gè)接點(diǎn)渴频,它有唯一的標(biāo)示符jabber identifier(JID)芽丹,即實(shí)體地址,用來(lái)表示一個(gè)Jabber用戶卜朗,但是也可以表示其他內(nèi)容拔第,例如一個(gè)聊天室.一個(gè)有效的JID包括一系列元素:(1)域名(domain identifier);(2)節(jié)點(diǎn)(node identifier)场钉;(3)源(resource identifier).它的格式是node@domain/resource蚊俺,node@domain ,類似電子郵件的地址格式.domain用來(lái)表示接點(diǎn)不同的設(shè)備或位置惹悄,這個(gè)是可選的春叫,例如a在Server1上注冊(cè)了一個(gè)用戶,用戶名為doom泣港,那么a的JID就是doom@serverl暂殖,在發(fā)送消息時(shí),指明doom@serverl就可以了当纱,resource可以不用指定呛每,但a在登錄到這個(gè)Server時(shí),fl的JID可能是doom@serverl坡氯、exodus(如果a用Exodus軟件登錄)晨横,也可能是doom@serverl/psi(如果a用psi軟件登錄).資源只用來(lái)識(shí)別屬于用戶的位置或設(shè)備等,一個(gè)用戶可以同時(shí)以多種資源與同一個(gè)XMPP服務(wù)器連接箫柳。

XMPP消息格式
XMPP通信原語(yǔ)有3種:message手形、presence和iq。

message

message是一種基本推送消息方法悯恍,它不要求響應(yīng)库糠。主要用于IM、groupChat涮毫、alert和notification之類的應(yīng)用中瞬欧。

主要屬性如下:

type屬性,它主要有5種類型:

normal:類似于email罢防,主要特點(diǎn)是不要求響應(yīng)艘虎;

chat:類似于qq里的好友即時(shí)聊天,主要特點(diǎn)是實(shí)時(shí)通訊咒吐;

groupchat:類似于聊天室里的群聊野建;

headline:用于發(fā)送alert和notification属划;

error:如果發(fā)送message出錯(cuò),發(fā)現(xiàn)錯(cuò)誤的實(shí)體會(huì)用這個(gè)類別來(lái)通知發(fā)送者出錯(cuò)了贬墩;


to屬性:標(biāo)識(shí)消息的接收方榴嗅。

from屬性:指發(fā)送方的名字或標(biāo)示。為防止地址外泄陶舞,這個(gè)地址通常由發(fā)送者的server填寫嗽测,而不是發(fā)送者。

載荷(payload):例如body肿孵,subject,thread

例子:

<message 

 to="lily@jabber.org/contact" 

 type="chat" >

   <body> 你好唠粥,在忙嗎</body>

</message>

presence

presence用來(lái)表明用戶的狀態(tài),如:online停做、away晤愧、dnd(請(qǐng)勿打擾)等。當(dāng)改變自己的狀態(tài)時(shí)蛉腌,就會(huì)在stream的上下文中插入一個(gè)Presence元素官份,來(lái)表明自身的狀態(tài)。要想接受presence消息烙丛,必須經(jīng)過(guò)一個(gè)叫做presence subscription的授權(quán)過(guò)程舅巷。


屬性:

type屬性,非必須河咽。有以下類別

subscribe:訂閱其他用戶的狀態(tài)

probe:請(qǐng)求獲取其他用戶的狀態(tài)

unavailable:不可用钠右,離線(offline)狀態(tài)

to屬性:標(biāo)識(shí)消息的接收方。

from屬性:指發(fā)送方的名字或標(biāo)示忘蟹。

載荷(payload):


show:

chat:聊天中

away:暫時(shí)離開(kāi)

xa:eXtend Away飒房,長(zhǎng)時(shí)間離開(kāi)

dnd:勿打擾

status:格式自由,可閱讀的文本媚值。也叫做rich presence或者extended presence狠毯,常用來(lái)表示用戶當(dāng)前心情,活動(dòng)褥芒,聽(tīng)的歌曲垃你,看的視頻,所在的聊天室喂很,訪問(wèn)的網(wǎng)頁(yè),玩的游戲等等皆刺。

priority:范圍-128~127少辣。高優(yōu)先級(jí)的resource能接受發(fā)送到bare JID的消息,低優(yōu)先級(jí)的resource不能羡蛾。優(yōu)先級(jí)為負(fù)數(shù)的resource不能收到發(fā)送到bare JID的消息漓帅。

例子:


<presence from="alice@wonderland.lit/pda">

  <show>xa</show>

  <status>down the rabbit hole!</status>

</presence>
 
iq (Info / Query)

一種請(qǐng)求/響應(yīng)機(jī)制,從一個(gè)實(shí)體從發(fā)送請(qǐng)求,另外一個(gè)實(shí)體接受請(qǐng)求忙干,并進(jìn)行響應(yīng)器予。例如,client在stream的上下文中插入一個(gè)元素捐迫,向Server請(qǐng)求得到自己的好友列表乾翔,Server返回一個(gè),里面是請(qǐng)求的結(jié)果施戴。

主要的屬性是type反浓。包括:

Get :獲取當(dāng)前域值。類似于http get方法赞哗。

Set :設(shè)置或替換get查詢的值雷则。類似于http put方法。

Result :說(shuō)明成功的響應(yīng)了先前的查詢肪笋。類似于http狀態(tài)碼200月劈。

Error: 查詢和響應(yīng)中出現(xiàn)的錯(cuò)誤。

例子:

<iq from="alice@wonderland.lit/pda" 

    id="rr82a1z7"

    to="alice@wonderland.lit" 

    type="get">

  <query xmlns="jabber:iq:roster"/>

</iq>

XMPP 3920 最靠譜的中文翻譯文檔

http://wenku.baidu.com/view/563b1ebff121dd36a32d8225.html

XMPP-RFC3921中文

http://wenku.baidu.com/view/37ac3efafab069dc502201c7.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末藤乙,一起剝皮案震驚了整個(gè)濱河市猜揪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌湾盒,老刑警劉巖湿右,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異罚勾,居然都是意外死亡毅人,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門尖殃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)丈莺,“玉大人,你說(shuō)我怎么就攤上這事送丰〉薅恚” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵器躏,是天一觀的道長(zhǎng)俐载。 經(jīng)常有香客問(wèn)我,道長(zhǎng)登失,這世上最難降的妖魔是什么遏佣? 我笑而不...
    開(kāi)封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮揽浙,結(jié)果婚禮上状婶,老公的妹妹穿的比我還像新娘意敛。我一直安慰自己,他們只是感情好膛虫,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布草姻。 她就那樣靜靜地躺著,像睡著了一般稍刀。 火紅的嫁衣襯著肌膚如雪撩独。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天掉丽,我揣著相機(jī)與錄音跌榔,去河邊找鬼。 笑死捶障,一個(gè)胖子當(dāng)著我的面吹牛僧须,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播项炼,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼担平,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了锭部?” 一聲冷哼從身側(cè)響起暂论,我...
    開(kāi)封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拌禾,沒(méi)想到半個(gè)月后取胎,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡湃窍,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年闻蛀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片您市。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡觉痛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出茵休,到底是詐尸還是另有隱情薪棒,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布榕莺,位于F島的核電站俐芯,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏钉鸯。R本人自食惡果不足惜泼各,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望亏拉。 院中可真熱鬧扣蜻,春花似錦、人聲如沸及塘。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)笙僚。三九已至芳肌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間肋层,已是汗流浹背亿笤。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留栋猖,地道東北人净薛。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蒲拉,于是被迫代替她去往敵國(guó)和親肃拜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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

  • 關(guān)于XMPP最權(quán)威的講解:http://www.jabbercn.org/RFC3920(這個(gè)才是最權(quán)威的雌团,下面文...
    隨風(fēng)飄蕩的小逗逼閱讀 1,466評(píng)論 1 5
  • 要學(xué)習(xí)基于XMPP協(xié)議的IM開(kāi)發(fā)燃领,首先要熟悉XMPP協(xié)議本身。 XMPP協(xié)議的組成主要的XMPP 協(xié)議范本及當(dāng)今應(yīng)...
    RichieQ閱讀 1,889評(píng)論 0 6
  • XMPP簡(jiǎn)介 XMPP協(xié)議簡(jiǎn)介 XMPP協(xié)議(Extensible Messaging and PresenceP...
    不規(guī)則先生閱讀 6,295評(píng)論 2 31
  • 說(shuō)明:本文主要闡述如何使用XAMPP锦援、Openfire工具基于XMPP搭建本地服務(wù)器猛蔽、實(shí)現(xiàn)即時(shí)通信。 即時(shí)通信 什...
    DH_Fantasy閱讀 3,431評(píng)論 3 22
  • 在邊城的那幾日灵寺,我一定不知道離開(kāi)那里之后會(huì)如此想念它曼库。 我想念邊城的風(fēng)土人情,想念邊城的沱江水替久,想念邊城的江景房凉泄,...
    手寫晴閱讀 749評(píng)論 7 3