首先了解一下即時(shí)通信的概念。通過(guò)消息通道 傳輸消息對(duì)象,一個(gè)賬號(hào)發(fā)往另外一賬號(hào),只要賬號(hào)在線,可以即時(shí)獲取到消息,這就是最簡(jiǎn)單的即使通訊。消息通道可由TCP/IP UDP實(shí)現(xiàn)。通俗講就是把一個(gè)人要發(fā)送給另外一個(gè)人的消息對(duì)象(文字,音視頻,文件)通過(guò)消息通道(C/S實(shí)時(shí)通信)進(jìn)行傳輸?shù)姆?wù)。即時(shí)通訊應(yīng)該包括四種形式,在線直傳、在線代理、離線代理、離線擴(kuò)展。在線直傳指不經(jīng)過(guò)服務(wù)器,直接實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)傳輸。在線代理指消息經(jīng)過(guò)服務(wù)器,在服務(wù)器實(shí)現(xiàn)中轉(zhuǎn),最后到達(dá)目標(biāo)賬號(hào)。離線代理指消息經(jīng)過(guò)服務(wù)器中轉(zhuǎn)到達(dá)目標(biāo)賬號(hào),對(duì)方不在線時(shí)消息暫存服務(wù)器的數(shù)據(jù)庫(kù),在其上線再傳發(fā)。離線擴(kuò)展指將暫存消息以其它形式,例如郵件、短信等轉(zhuǎn)發(fā)給目標(biāo)賬號(hào)。

       此外,我們還需要認(rèn)識(shí)一下計(jì)算機(jī)網(wǎng)絡(luò)相關(guān)的概念。經(jīng)典的計(jì)算機(jī)網(wǎng)絡(luò)四層模型中,TCP和UDP是傳輸層協(xié)議,包含著消息通信內(nèi)容。ip為網(wǎng)絡(luò)層協(xié)議,是一種網(wǎng)絡(luò)地址。TCP/IP,即傳輸控制協(xié)議/網(wǎng)間協(xié)議,定義了主機(jī)如何連入因特網(wǎng)及數(shù)據(jù)如何在它們之間傳輸?shù)臉?biāo)準(zhǔn)。Socket,又稱(chēng)“套接字”, 在應(yīng)用層和傳輸層之間的一個(gè)抽象層,用于描述 IP 地址和端口,是一個(gè)通信連的句柄,應(yīng)用程序通常通過(guò)“套接字”向網(wǎng)絡(luò)發(fā)送請(qǐng)求或者應(yīng)答網(wǎng)絡(luò)請(qǐng)求,它就是網(wǎng)絡(luò)通信過(guò)程中端點(diǎn)的抽象表示。它把TCP/IP層復(fù)雜的操作抽象為幾個(gè)簡(jiǎn)單的接口供應(yīng)用層調(diào)用已實(shí)現(xiàn)進(jìn)程在網(wǎng)絡(luò)中通信。XMPP(可擴(kuò)展消息處理現(xiàn)場(chǎng)協(xié)議)是基于可擴(kuò)展標(biāo)記語(yǔ)言(XML)的協(xié)議,應(yīng)用于即時(shí)通訊場(chǎng)景的應(yīng)用層協(xié)議,底層通過(guò)Socket實(shí)現(xiàn)。它用于即時(shí)消息(IM)以及在線現(xiàn)場(chǎng)探測(cè)。它在促進(jìn)服務(wù)器之間的準(zhǔn)即時(shí)操作。這個(gè)協(xié)議可能最終允許因特網(wǎng)用戶(hù)向因特網(wǎng)上的其他任何人發(fā)送即時(shí)消息, 即使其操作系統(tǒng)和瀏覽器不同。這樣實(shí)現(xiàn)即時(shí)通訊就有兩種方案,一是從套接字入手,直接利用socket提供的接口進(jìn)行數(shù)據(jù)的傳送。二是借助開(kāi)源工具(服務(wù)器openfire),用XMPPConnection創(chuàng)建連接。

     XMPP是實(shí)現(xiàn)即時(shí)通訊使用較為普遍的做法。XMPP中,各項(xiàng)工作都是通過(guò)在一個(gè) XMPP 流上發(fā)送和接收 XMPP 節(jié)來(lái)完成的。核心 XMPP 工具集由三種基本節(jié)組成,這三種節(jié)分別為<presence>、出席<message>、<iq>。XMPP 流由兩份 XML 文檔組成,通信的每個(gè)方向均有一份文檔。這份文檔有一個(gè)根元素<stream:stream>,這個(gè)根元素的子元素由可路由的節(jié)以及與流相關(guān)的頂級(jí)子元素構(gòu)成。xmpp協(xié)議同樣包括客戶(hù)端和服務(wù)器??蛻?hù)端基于 Android 平臺(tái)進(jìn)行開(kāi)發(fā)。負(fù)責(zé)初始化通信過(guò)程,進(jìn)行即時(shí)通信時(shí),由客戶(hù)端負(fù)責(zé)向服務(wù)器發(fā)起創(chuàng)建連接請(qǐng)求。系統(tǒng)通過(guò) GPRS 無(wú)線網(wǎng)絡(luò)與Internet 網(wǎng)絡(luò)建立連接,通過(guò)服務(wù)器實(shí)現(xiàn)與 Android 客戶(hù)端的即時(shí)通信腳。服務(wù)器端則采用 Openfire 作為服務(wù)器。 允許多個(gè)客戶(hù)端同時(shí)登錄并且并發(fā)的連接到一個(gè)服務(wù)器上。服務(wù)器對(duì)每個(gè)客戶(hù)端的連接進(jìn)行認(rèn)證,對(duì)認(rèn)證通過(guò)的客戶(hù)端創(chuàng)建會(huì)話,客戶(hù)端與服務(wù)器端之間的通信就在該會(huì)話的上下文中進(jìn)行。使用了 asmark 開(kāi)源框架實(shí)現(xiàn)的即時(shí)通訊功能.該框架基于開(kāi)源的 XMPP 即時(shí)通信協(xié)議,采用 C/S 體系結(jié)構(gòu),通過(guò) GPRS 無(wú)線網(wǎng)絡(luò)用TCP 協(xié)議連接到服務(wù)器,以架設(shè)開(kāi)源的 Openfn'e 服務(wù)器作為即時(shí)通訊平臺(tái)。xmpp消息通道的創(chuàng)建:

          先配置通道信息進(jìn)行連接

   &nbs

網(wǎng)友評(píng)論