首頁 > 軟體

Smack 4.1.x升級指南

2020-06-16 17:52:54

一、Smack 4.1的主要改進

Smack 4.1.x最大的改進有兩點:
1)支援XEP-198規範,即流管理
2)原生支援Android
Smack 4.1使得原先的aSmack庫可以丟入垃圾堆了。注意aSmack的最新版本只到4.0.7版。

二、流管理

流管理(Stream Management)
Smack 4.1預設流管理是關閉的。可以通過下面的方法開啟流管理:
XMPPTCPConnection.setUseStreamManagement(true)

流管理規範可以查閱:http://xmpp.org/extensions/xep-0198.html
流管理是XMPP的一個擴充套件,新增了確認(Acknowledgement)節和流恢復。這意味著如果在手機上使用Jabber,那麼即使不在服務區,也不會丟失訊息。
Jaber使用TCP協定,TCP協定是可靠的協定,當使用者丟失連線時,訊息可能丟失,此時服務區仍然保持了對用戶端開啟TCP連線,傳送訊息,而用戶端離開服務區,訊息可能就丟失了。
在較好的情況下,用戶端離開服務區時,網路服務商(Network Provider)會立即關閉連線,這樣的話,訊息就會作為離線訊息儲存到伺服器。而在某些較壞的情況下,用戶端離開l 服務區,而伺服器的連線並沒有斷開,此時伺服器轉發訊息到用戶端,訊息就會丟失。
XEP-198規範就是針對這種情況的解決方案,它並不是讓用戶端離線時還能保持連線,而是引入了兩個重要的元素,讓用戶端在錯過了訊息後還能把訊息找回來。
確認節允許伺服器和用戶端對每一個傳送的單個訊息或群訊息的請求進行確認,一旦收到了確認,就認為訊息交付成功了。
當重建連線時,使用流恢復。通過在確認節包含序列號,用戶端和伺服器都能彼此清楚訊息是在什麼時候中斷的,能重新傳送訊息。
這兩個機制可以對交付的每一條訊息提供可靠的保證,同樣的機制還可用於S2S(伺服器連線伺服器)。

三、Smack 4.1的API變化

Smack 4.1.x主要的API變化包括:

  1. XMPPConnection變更為介面
    當宣告連線時,可以使用AbstractXMPPConnection或者是XMPPConnection的子類作為靜態型別。

  2. 重新實現了SASL認證
    對於自定義的SASL機制,或許要調整程式碼。

  3. 新增了IQ請求控制代碼API
    包(Packet)監聽器和包收集器不再能監聽IQ請求,也即IQ的“get”和“set”型別。

  4. XMPPConnection.addPacketListener方法被廢棄了
    改為用新增非同步包監聽器addAsyncPacketListener方法或新增同步包監聽器addSyncPacketListener方法來代替它。

  5. StringUtils工具類
    StringUtils工具類新增到XmppStringUtils包(在jxmpp-core包中),方法名也有些變化,比如parseName變更為parseLocalpart。

  6. 訊息監聽器類的變化
    訊息監聽器MessageListener類改名為ChatMessageListener,MessageListener類名現在是不通的介面。

  7. 連線設定類使用了Builder模式
    連線設定ConnectionConfiguration類使用了Builder設計模式。

  8. FormField.getType和Form.getType
    FormField.getType和Form.getType都改成了列舉型別Enum。

  9. 廢棄了包Packet介面
    包Packet介面廢棄了。使用新的Stanza類的getStanzaId方法來代替getPacketID方法。

  10. Roster類的變化
    使用Roster.instance獲得一個範例,原先是XMPPConnection.getRoster方法獲得的。

  11. ConnectionListener.authenticated方法的變化
    ConnectionListener.authenticated方法新增了一個布林型引數resumed。

  12. XMPPTCPConnection.addStanzaAcknowledgedListener方法取消了一個異常
    XMPPTCPConnection.addStanzaAcknowledgedListener方法取消了StreamManagementNotEnabledException異常。

  13. 如果使用SASL擴充套件,要使用ConnectionConfiguration.Builder.allowEmptyOrNullUsernames

  14. SmackConfiguration.DEBUG_ENABLED變更為SmackConfiguration.DEBUG

本文永久更新連結地址http://www.linuxidc.com/Linux/2015-09/123304.htm


IT145.com E-mail:sddin#qq.com