一直聽朋友們說xmpp,怎麼好怎麼流行,我也挺感興趣,可是由於最近工作很忙,沒有時間看,今天終於抽出時間研究了一下,首先是XMPP到底是什麼?
XMPP是:是一種以XML爲基礎的開放式實時通信協議,是經由互聯網工程工作小組(IETF)通過的互聯網標準。XMPP因爲被Google Talk應用而被廣大網民所接觸。
優點:
1、開放
XMPP協議是自由、開放、公開的,並且易於瞭解。而且在客戶端、服務器、組件、源碼庫等方面,都已經各自有多種實現。
2、標準
- 互聯網工程工作小組(IETF)已經將Jabber的核心XML流協議以XMPP之名,正式列爲認可的實時通信及Presence技術。而XMPP的技術規格已被定義在RFC 3920及RFC 3921。任何IM供應商在遵循XMPP協議下,都可與Google Talk實現連接。
- 3、證實可用
- 第一個Jabber(現在XMPP)技術是Jeremie Miller在1998年開發的,現在已經相當穩定;數以百計的開發者爲XMPP技術而努力。今日的互聯網上有數以萬計的XMPP服務器運作著,並有數以百萬計的人們使用XMPP實時傳訊軟件。
- 4、分散式
- XMPP網絡的架構和電子郵件十分相像;XMPP核心協議通信方式是先創建一個stream,XMPP以TCP傳遞XML數據流,沒有中央主服務器。任何人都可以運行自己的XMPP服務器,使個人及組織能夠掌控他們的實時傳訊體驗。
- 7、彈性佳
- XMPP除了可用在實時通信的應用程序,還能用在網絡管理、內容供稿、協同工具、文件共享、遊戲、遠程系統監控等。
- 8、多樣性
- 用XMPP協議來建造及佈署實時應用程序及服務的公司及開放源代碼計劃分佈在各種領域;用XMPP技術開發軟件,資源及支持的來源是多樣的,使得使你不會陷於被“綁架”的困境。
缺點:
1、數據負載太重 隨着通常超過70%的XMPP協議的服務器的數據流量的存在和近60%的被重複轉發,XMPP協議目前擁有一個大型架空中存在的數據提供給多個收件人。新的議定書正在研究,以減輕這一問題。(個人觀點:一直不是很火的原因就是這個,希望早點改進) 2、沒有二進制數據 XMPP協議的方式被編碼爲一個單一的長的XML文件,因此無法提供修改二進制數據。因此, 文件傳輸協議一樣使用外部的HTTP。如果不可避免,XMPP協議還提供了帶編碼的文件傳輸的所有數據使用的Base64。至於其他二進制數據加密會話(encrypted conversations)或圖形圖標(graphic icons)以嵌入式使用相同的方法。
有了上述的基本瞭解之後相信各位也有自己的主意,是否要看接下來的內容:
即時通訊(Instant Messenger),就是現在的QQ、MSN、Gtalk等軟件都是即時通許軟件。啓動gtalk就是其中基於xmpp協議實現的一款即時通訊軟件。但是開發一款這種軟件還是任重而道遠的。
實現XMPP 即時通許首要要了解openfire(服務端)、客戶端(下載潘迪安、spark、如意通等軟件,前期輔助學習)、smack(它實現了xmpp的協議)。上述如何使用和配置我就不多講了,可以訪問如下:
http://www.cnblogs.com/xiaodao/archive/2013/04/05/3000554.html 或 http://blog.csdn.net/shimiso/article/details/8816558(感謝內容提供者,我也是跟着他們學習,加以總結,加深自己的印象,把自己遇到問題的地方和大家分享一下)。
現在我相信同學都做好了相應的配置了,直接進入正題:
我用的mac本,潘迪安和如意通我是不用想了,我下載是spark。然後進入openfire的管理端
選擇用戶/組,然後選擇新建用戶(同學們的數據都做關聯了吧),出了管理員之外在建立兩個用戶:
然後打開spark,登陸界面如下:輸入你的用戶名和密碼(各位不要選擇自動登陸啊,否則你要改服務器和用戶名的時候就有你頭疼的了):
點擊spark的高級,做如下配置:
確定之後你就可以登陸了。如果登陸不了可能有兩個原因:
第一:數據庫沒起
第二:openfire沒起(注:openfire在mac自動啓動,建議每次想用的時候都重啓了,會避免很多問題,如後管無法登陸,新建用戶不生效等問題就出必殺:重啓)。
接下來用Eclipse建立一個java的工程,細節不多說了,代碼如下:
ConnectionConfiguration connectionConfig = new ConnectionConfiguration("127.0.0.1", Integer.parseInt("5222"),"127.0.0.1");
// 允許自動連接
connectionConfig.setReconnectionAllowed(true);
connectionConfig.setSendPresence(true);
Connection connection = new XMPPConnection(connectionConfig);
try {
connection.connect();// 開啓連接
} catch (XMPPException e) {
throw new IllegalStateException(e);
}
connection.login("bjsujb1", "123456"); //第二個用戶和密碼
System.out.println(connection.getUser());
connection.getChatManager().createChat("[email protected]",null).sendMessage("Hello word!");
ConnectionConfiguration這個類初始化的時候三個參數分辨爲第一個:服務器地址 第二個:對應端口號 第三個:代理服務器地址(可不寫,展示也可隨便寫)。
現在代碼你會發現spark收到了一條bjsujb1所發來的消息,內容是Hello word