天天看點

XMPP用戶端庫Smack 4.0.6版開發之二

版權聲明:本文為部落客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)。這個指定的配置檔案包含了一系列需載入初始化的類清單。所有的管理器類型的類都需要被初始化,這些管理器類就包含在上面所說的初始化清單中。