版權聲明:本文為部落客chszs的原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/chszs/article/details/41576877
XMPP用戶端庫Smack 4.0.6版開發之二
作者:chszs,轉載需注明。部落格首頁:
http://blog.csdn.net/chszs三、Smack庫的特征
1、極度簡單易用,API功能強大
發送一條文本消息給某個使用者隻需幾行代碼:
AbstractXMPPConnection connection = new XMPPTCPConnection("mtucker", "password", "jabber.org");
connection.connect();
connection.login();
Chat chat = ChatManager.getInstanceFor(connection)
.createChat("[email protected]", new MessageListener(){
public void processMessage(Chat chat, Message message){
System.out.println("Received message: " + message);
}
});
chat.sendMessage("Howdy!");
2、隔離了底層資料包組裝的複雜性,自然有相應的庫來完成這些功能。Smack提供了更智能的高層構造,比如Chat類和Roster類,這樣開發會更富有效率。
1)無需熟悉XMPP的XML格式,甚至都不需要了解XML
2)提供了簡單的M2M通信
Smack讓開發者可以對每條消息都設定大量的屬性,屬性中還可以包含Java對象。
3)基于Apache許可證的開源代碼,這意味着你可以把Smack放入你自己的商業軟體中。
四、Smack庫的組成
Smack庫可以内嵌到任意的Java應用程式中。Smack庫有數個JAR檔案組成,非常具有靈活性。
1、smack-core.jar
提供了核心XMPP功能。都是XMPP RFC規範定義的XMPP特性。
2、smack-extensions.jar
支援許多由XMPP Standards Foundation定義的擴充(XEP)功能。包括群聊、檔案傳輸、使用者搜尋等等。
以後可檢視文檔《擴充手冊》:
https://github.com/igniterealtime/Smack/blob/master/documentation/extensions/index.html(目前還是無效的)
3、smack-experimental.jar
支援許多由XMPP Standards Foundation定義的體驗性(XEP)功能。其API和功能特性都被認為是不穩定的。
4、smack-legacy.jar
支援許多由XMPP Standards Foundation定義的遺留(XEP)功能。
5、smack-bosh.jar
支援BOSH通信(XEP-0124規範定義的)。此代碼被認為處于Beta階段。
6、smack-jingle.jar
支援Jingle。此代碼很老,目前處于無維護的狀态。
7、smack-resolver-dnsjava.jar
支援對DNS SRV記錄的解析,主要用于那些不支援javax.naming API的平台。
8、smack-debug.jar
用于協定流量的增強型GUI調試器。當調試模式開啟後,如果它在類路徑下,它會自動被使用。
以後可檢視文檔《調試模式》:
https://github.com/igniterealtime/Smack/blob/master/documentation/debugging.html五、Smack的配置
Smack的初始化過程涉及到2階段的調用。
1、初始化系統屬性
通過SmackConfiguration類初始化所有的系統可通路屬性,這些屬性都是通過getXXX方法取回屬性值的。
2、初始化啟動類
任意類如果繼承了SmackInitializer接口後,都可以在調用initialize()方法後得到初始化,這意味着得到初始化的類在啟動後都是活動的。
如果沒有繼承SmackInitializer接口,那麼要實作初始化,必須要放置一個靜态代碼塊來實作——他在類裝載時會自動執行。
初始化是通過配置檔案來完成的。預設情況下,Smack會載入Smack JAR檔案中内嵌的配置檔案(它位于org.jivesoftware.smack/smack-config.xml)。這個指定的配置檔案包含了一系列需載入初始化的類清單。所有的管理器類型的類都需要被初始化,這些管理器類就包含在上面所說的初始化清單中。