Openfire注冊流程代碼分析一、客戶端/服務端注冊用戶流程經過主機連接消息確認后,客戶端共發送倆條XML完成注冊過程。服務器返回兩條XML。注:IQ消息節點用于處理用戶的注冊、好友、分組、獲取在線用戶列表等MESSAGE消息節點用于處理用戶的消息發送等等PRESENCE消息節點用戶處理用的在線狀態,例如用戶上線、離線、忙等。客戶端:告訴服務器注冊從那個地址發出.
QQ的通信協議是一套基于二進制數據的自己開發的應用層網絡協議。其中使用一些公司的加密算法。QQ基本通信協議支持udp和tcp兩種基本協議方式。兩種方式的基本數據結構是一樣的。只是tcp包多了一個描述長度的頭部。
Openfire 是基于XMPP 協議的IM 的服務器端的一個實現,雖然當兩個用戶連接后,可以通過點對點的方式來發送消息,但是用戶還是需要連接到服務器來獲取一些連接信息和通信信息的,所以服務器端是必須要實現的。Openfire 也提供了一些基本功能,但真的很基本的!慶幸的是,它也提供插件的擴展,像Spark 一樣,同樣強烈建議使用插件擴展的方式來增加新的功能,而不是修改人家的源代碼。
認證(Authorization)的作用在于表明自己是誰,即向別人證明自己是誰。而相關的概念是MD5,用于認證安全。注意MD5僅僅是個hash函數而已,并不是用于加密。因為hash函數處理后的數據沒法進行反向恢復,這樣子的話別人沒法盜取你認證身份的口令。 加密(Encryption)的作用在于對想傳輸的數據進行處理,在網絡中即使被竊取也難以破解。加密的信息可以被破解,這需要一把鑰匙——“密鑰”。通過密鑰,我們可以對數據進行加密和解密。最有名的專用密鑰加密系統就是數據加密標準(DES), 這個標準現在由美國國家安全局和國家標準與技術局來管理。另一個系統是國際數據加密算法(IDEA), 它比DES的加密性好, 而且需要的計算機功能也不怎么強。
此需求說明書為『即時通訊系統』定義明確的需求,為該系統的詳細設計、開發工作提供依據,為項目設計人員、開發人員、使用人員和其他相關人員對系統實現的功能達成統一的認識提供一個明確的書面說明。 本文檔的內容,大部分是對即時通訊流程的一些闡述。
本文檔探討基于Asterisk如何實現VoIP的一些基本功能,包括基本呼叫功能的方案選取、主叫號碼透傳、如何編寫Asterisk AGI程序、Radius認證計費模塊等。 由于IP電話技術標準的開發涉及多個領域,因此,VOIP系統要想實現這些IP電話之間的通信,則必須提供支持這些協議的實現。目前主要涉及的協議如圖1-1所示,其中除了HTTP是與WWW相關的協議外,其它的都是VOIP相關協議。
XMPP 是一種很類似于http協議的一種數據傳輸協議,它的過程就如同“解包裝--〉包裝”的過程,用戶只需要明白它接受的類型,并理解它返回的類型,就可以很好的利用xmpp來進行數據通訊。XMPP(可擴展消息處理現場協議)是基于可擴展標記語言(XML)的協議,它用于即時消息(IM)以及在線現場探測。它在促進服務器之間的準即時操作。這個協議可能最終允許因特網用戶向因特網上的其他任何人發送即時消息,即使其操作系統和瀏覽器不同。 XMPP的前身是Jabber,一個開源形式組織產生的網絡即時通信協議。XMPP目前被IETF國際標準組織完成了標準化工作。標準化的核心結果分為兩部分;
實時 web 應用程序是聯網的應用程序,帶有基于 web 的用戶界面,能夠及時顯示剛剛發布的 Internet 信息。這樣的應用程序示例包括社會新聞聚合器和監控工具,它們能夠使用來自外部源的數據持續更新。在本教程中,您將創建一個小型通知工具 Pingstream,它使用 PHP 和 JavaScript 通過 Extensible Messaging and Presence Protocol (XMPP) 進行通信,XMPP 是一組設計用于支持聯機狀態和實時通信功能的 XML 技術。
Openfire3.7.1 For Linux集群正確配置0、待完成工作相關優化參數配置,未做。一、準備工作0.RHL企業版64位1.JDK1.6上傳至/usr2.下載openfire-3.7.1-1.i386.rpm3.準備好集群用插件Clustering.jar、coherence.jar、coherence-work.jar、tangosol.jar,mysql-connector-java-5.0.7-bin4.準備好mysql,mysql-5.1.52.tar.gz
RFC3920可擴展的消息和出席信息協議(XMPP):核心協議關于本文的說明本文為互聯網社區定義了一個互聯網標準跟蹤協議,并且申請討論協議和提出了改進的建議。請參照“互聯網官方協議標準”的最新版本(STD1)獲得這個協議的標準化進程和狀態。本文可以不受限制的分發。
會話啟動協議SIP(Session Initiation Protocol)是由IETF提出并主持研究的一個在IP網絡上進行多媒體通信的應用層控制協議,它被用來創建、修改、和終結一個或多個參加者參加的會話進程。這些會話包括Internet多媒體會議、Internet電話、遠程教育以及遠程醫療等。即所有的因特網上交互式兩方或多方多媒體通信活動,統稱為多媒體會話。參加會話的成員可以通過組播方式、單播聯網方式或者兩者結合的方式進行通信。
Openfire服務器的介紹Openfire是用Java語言編寫的,是基于XMPP協議、開源的實時協作的服務器,具有跨平臺的能力。它是實現XMPP協議的Server端包。Openfire與客戶端采用的是C/S架構.一個服務器要負責為連接在其上的客戶端提供服務。Openfire服務器的優點:1、內部集成web服務器,可用于設計web管理程序2、插件機制,方便擴展3、單臺服務器就可大容量支持上萬用戶4、安裝和使用都非常簡單Spark客戶端的介紹Spark也是一個開源,跨平臺IM客戶端。它的特性支持聊天,語音,視頻,會議,文件收發,截屏,連接msn等功能和強大安全性能。如果企業內部部署IM使用Openfire+Spark是最佳的組合。Spark的核心則是Smack。Smack是什么?smack是一個用java寫的XMPP客戶端代碼庫,也是一個開源。優點:1.Smack是一個簡單的,功能強大的類庫。2.提供了更加智能化的類比如Chat和Groups,提高工作效率。3.不需要你熟悉XMPPXML格式,甚至是XML格式。4.易于實現機-機對話。
XMPP1.簡介XMPP(Extensible Messagingand Presence Protocol)是一種以XML為基礎的開放式即時通訊協議,核心部分RFC為RFC3920。有以下優點:可擴展性:XMPP的數據傳輸基于XML格式,可擴展性強。XMPP的核心協議棧(CoreStack)部分只定義了基礎的Presence,Message,Iq等最主要數據格式和傳輸邏輯,更多的功能則通過定義擴展(Extensions)實現。
一、XMPP概述XMPP(可擴展消息處理現場協議)是基于可擴展標記語言(XML)的協議,它用于即時消息(IM)以及在線現場探測。XMPP的前身是Jabber,一個開源形式組織產生的網絡即時通信協議。二、XMPP體系架構XMPP的基本網絡結構,xmpp定義了3個角色ClientServerGateway通信能夠在這三者的任意兩個之間雙向發生。服務器同時承擔了客戶端信息記錄,連接管理和信息的路由功能。網關承擔著與異構即時通信系統的互聯互通,異構系統可以包括SMS(短信),MSN,ICQ等。基本的網絡形式是單客戶端通過TCP/IP連接到單服務器,然后在之上傳輸XML。
在serverstarter啟動時會用ClassLoader加載XMPPServer,XMPPServer會加載各種模塊其中包括ConnectionManagerImpl,ConnectionManagerImpl是ConnectionManager接口的實現。該模塊一般在加載完其它模塊后加載,因為不希望在其它模塊還沒加載完的時候就監聽客戶端。
Java領域的即時通信的解決方案可以考慮openfire+spark+smack。當然也有其他的選擇。Openfire是基于Jabber協議(XMPP)實現的即時通信服務器端版本,目前建議使用3.6.4版本,這個版本是當前最新的版本,而且網上可以找到下載的源代碼。即時通信客戶端可使用spark2.5.8,這個版本是目前最新的release版本,經過測試發現上一版本在視頻支持,msn網關支持上可能有問題,所以選擇openfire3.6.4+spark2.5.8是最合適的選擇。
“會話發起協議(Session Initiation Protocol-SIP)是一個應用層的信令控制協議。用于創建、修改和終止一個或多個參與者的會話。這些會話可以是Internet多媒體會議、IP電話或多媒體分發(例如:語音信箱)。會話的參與者可以通過組播(multicast)、網狀單播(unicast)或兩者的混合體進行通信。”
oSIP是按照RFC3261(SIP)和RFC2327(SDP)標準,并使用標準c編寫的一個SIP協議棧。它是一個公開源碼的免費協議棧。oSIP協議棧結構簡單而小巧,它并不提供高層的SIP會話控制的API,它主要提供一些解析SIP/SDP消息的API和事務處理的狀態機。
SIP是一個應用層的控制協議,可以用來建立、修改、和終止多媒體會話(或者會議)例如Internet 電話。SIP也可以邀請參與者參加已經存在的會話,比如多方會議。媒體可以在一個已經存在的會話中方便的增加(或者刪除)。SIP顯示的支持名字映射和重定向服務,這個用于支持個人移動業務-用戶可以使用一個唯一的外部標志而不用關系他們的實際網絡地點。
開源代碼的osip協議棧分為兩個源代碼包,整個協議棧采用lib庫的形式,在內部沒有使用到任務,采取與TCP/IP協議棧一樣的策略,所以在使用上需要上層管理任務直接調用lib庫提供的接口。因為在Lib庫內部沒有使用到像定時器、發送隊列等的任務,而同時需要使用到定時器,所以在lib庫的內部采用輪訓遍歷的方式不停的檢查是否有定時器超時,這在某種程度上會浪費CPU的允許時間。同時整個lib庫實現了對call, notify等的管理,為了實現重入,在應用啟用多線程的條件下,內部啟用的信號量和鎖的使用,在下面的分析中不涉及到信號量和鎖機制。