歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Smack 4.1.x升級指南

Smack 4.1.x升級指南

日期:2017/2/28 13:57:43   编辑:Linux教程

一、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

Copyright © Linux教程網 All Rights Reserved