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

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

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

          先配置通道信息進行連接

   &nbs