SyncML Client實現研究 

  自動化在線Autooo.net  

移動通信技術和計算機技術的進步促進了移動計算和通信設備的流行,人們開始使用越來越多而且是各種各樣的移動終端設備進行通信,處理和存儲各種數據和信息。眾多的終端設備使得不同設備間相同的數據和信息常常處於不一致的狀態,這就需要進行移動數據同步。在當前的移動數據同步領域,存在著眾多互不兼容的不同廠商各自的數據同步標準,給最終用戶、設備製造商、應用程序開發商和服務提供商帶來了很多的問題。針對這種混亂的狀況,製定一個統一的通用數範必須能夠在任何一種網絡傳輸協議之上和任意的數據設備之間同步任何一種協議所定義的數據和信息。


1 SyncML簡介
    SyncML數據同步規範〔1-6〕是由數據同步論壇組織一SyncML發起組(SyncML Initiative)一製定的一個通用數據同步標準。由於SyncML數據同步規範是由國際上眾多的包括Ericsson、IBM、Lotus、Matsushita、Motorola、Nokia、Openwave和Starfish在內的眾多公司,根據通用數據同步規範的要求共同製定完成的,所以該規範目前已經成為一個被廣泛接受的工業界通用的同步
協議標準。國際電信聯盟已認可其為下一代移動通信標準的組成部分。
    SyncML數據同步規範主要包括3個部分,即SyncML同步協議(SyncML Sync Protoc01)、SyncML表示協議(SyncML Representation Protoc01)和SyncML的傳輸方式綁定(目前僅包括SyncML HTTP Binding、SyncML OBEXBinding和SyncML WSP Binding)。SyncML同步協議主要定義了數據同步操作的會話流程、會話過程中的數據交互過程、同步雙方的握手過程及數據同步的類型等SYncML表示協議主要定義了同步所支持的數據類型、命令格式以及在各種網絡上傳輸的SYncML消息格式。SyncML消息可以在任何一種有線和無線的網絡上傳輸,在SYncML協議的傳輸方式綁定中定義了在HTT P(HyperText Transfer Protocol,超文本傳輸協議)、WSP(Wireless Session Protocol,無線會話協議)、OBEX(Object Exchange Protocol,對象交換協議)三種協議的網絡鏈接上傳輸SyncML消息的方式。這三種傳輸協議基本上涵蓋了所有的遠程和短程連接。

    在SyncML同步協議中,定義了SyncML客戶端和SyncML服務器端之間消息的交互過程,包括同步雙方數據標識符的定義及映射、數據庫修改數據時的安全措施等。定義的數據同步類型包括雙向同步(two-way wync)、慢同步(slow syne)、客戶端發起單向同步(one-way sync from client only)、客戶端發起刷新同步(refresh sync from client only)、服務器端發起單向同步(one-way sync from server only)、服務器端發起刷新同步(refresh syne from server only)、服務器端請求同步(server alerted sync)等。圖1說明了SyncML客戶端和服務器端同步時的消息交互情況,其中移動電話作為SyncML同步的客戶端, 一台網絡服務器作為SyncML同步的服務器端。移動電話發送包含數據修改信息的SyncML消息給網絡服務器, 網絡服務器根據SyncML消息中的數據進行各種同步操作, 同步服務器中存儲的數據, 然後把修改結果信息回應給移動電話。


2 SRTK分析
    為了方便SyncML數據同步規範的推廣和實現, 同時也為了驗證sYncML數據同步規範的可實現性,SyncML發起組發布了一個開放源碼的SyncML參考實現—SyncML參考工具包。該工具包用C語言進行開發,包含一個綜合的C庫,用於創建、發送、接收和解析SyncML消息。SRTK是一個比較成熟的產品。 可以在Windows平台和Linux平台上編譯。此外,它還為EPOC平台和Palm平台預留了接口。它支持XML和WBXML編碼,支持HTTP(用於Web上的同步)、WSP(在WAP上使用)和0BEX(在IrDA或藍牙上使用)傳輸。目前,SyncML參考工具包是在SourceForge(http://sourceforge.nct/)上托管的,項目名稱為SyncML C T00lkit,最新版本為4.3版(發布於2003年10月27日)。
2.1 SRTK總體結構
    SyncML參考工具包的外部結構和內部總體結構如圖2所示。SyncML Reference Implementation(即SyncML參考工具包)通過一係列應用編程接口為上層應用程序提供數據同步服務,上層應用程序通過傳輸處理接口使用獨立的網絡傳輸模塊完成數據收發工作。應用層除了使用下層提供的API外,還必須向下層的網絡傳輸模塊和SRTK提供一係列的回調函數,以完成錯誤處理、同步命令處理及SyncML消息分片傳輸等功能。

    由於SRTK主要實現的是SyncML消息的創建、解析及相關事務處理等功能,其本身並不具備網絡數據收發功能,故上層應用程序需要利用獨立的網絡傳輸來實現數據同步功能。在SRTK的實際開發中,為了方便在SyncML參考工具包的基礎上進行相關同步應用程序的開發,SyncML發起組在編寫SRTK的同時,也實現了能夠進行HTTP、WSP和0BEX傳輸的通信工具包(Communication Toolkit),並與SyncML工具包一起發布。
    SyncML參考工具包的內部實現結構主要分為三層,分別為SyncML核心層、SyncML插件層和SyncML基本庫層。SyncML核心層主要實現供應用層調用的SyncML參考實現接口。這一層獨立於具體的係統平台, 主要包括三個部分:SyncML事務管理模塊, 主要負責同步事務管理, 包括多同步的協調、工作區緩存的訪IN控製和同步收發模式的切換等;SyncML命令生成模塊,主要負責生成SYncML同步消息, 僅用於同步發送模式;SyncML命令處理模塊,主要負責解析收到的SyncML同步消息並調用應用層提供的回調函數完成相應的同步操作,僅用於同步接收模式。中間的SyncML插件層主要實現一係列供SyncML核心層調用的下層功能,主要包括兩個部分, 即SyncML工作區管理模塊(負責用於存放svncML消息的工作區緩存的分配和回收工作)和SyncML編解碼模塊(負責XML或WBXML格式的SyncML消息的編碼或解析工作)。在SyncML參考工具包中,該層根據具體的運行平台進行了一定程度的優化。由於其被設計成插件層,所以它允許同時有多個SyncML工作區管理模塊或SyncML編解碼模塊存在,實際的同步實現可以根據不同情況調用不同的插件。最下一層是SyncML基本庫層,主要實現底層的諸如存儲管理、字符串處理等功能。這一層的主要作用是增強實現的可移植性。
2.2 SRTK同步模式
    根據SyncML同步角色的差異,SyncML參考工具包分別工作於兩種不同的模式:當SyncML同步軟件作為同步消息的發起者時,SyncML參考工具包工作於同步發送模式,此時SyncML命令處理模塊處於不工作狀態;當SyncML同步軟件作為同步消息的接收者時,SyncML參考工具包工作於同步接收模式,此時SyncML命令生成模塊處於不工作狀態。
2.2.1 同步發送模式
    當需要發起SyncML同步(客戶端)或回應對方的SyncML同步(服務器端)時,SyncML事務管理模塊將使SRTK工作於同步發送模式。首先,應用程序調用smllnitlnstane(),創建一個SyncMI同步事務(同時為其分配工作區緩存),必要的情況下可以調用SyncSetSeesion Options(),設置同步事務的參數。當事務被成功創建之後,應用程序就可以調用smlStarMessage(),開始創建同步消息文檔。當應用程序完成相關同步命令後,調用接口smlEndMessage(),結束同步消息文檔的創建工作。在這兩個接口調用之間,應用程序可以根據不同的同步操作命令調用不同的接口,向同步消息文檔中添加同步命令信息。當應用程序完成同步消息文檔的創建工作以後, 應用程序就可以調用smILockReadButffer()鎖定工作區緩存,同時獲取生成的同步消息文檔。之後,就可以調用網絡傳輸模塊的xptSendData()發送同步消息,發送完成後應用程序必須調用smlUnlockReadBuffer(),將工作區緩存解鎖並釋放工作區緩存。最後,應用程序調用smlTerminatelnstance(),結束同步事務。
2.2.2同步接收模式
    當需要接收對方的SyncML同步回應(客戶端)或接收對方發起的SyncML同步(服務器端)時,SyncMI事務管理模塊將使SRTK工作於同步接收模式。首先,應用程序調用smllnitlnstance()創建一個SyncMI同步事務(同時為其分配工作區緩存)。必要的情況下可以調用SyncSetSeesionOptions(),設置同步事務的參數。當事務被成功創建之後,應用程序就可以調用smlLockWrite Buffer()鎖定工作區緩存,同時利用接口xptReceiveData()接收同步消息文檔並保存到工作區緩存中。當應用程序完成同步消息文檔的接收後調用接口smlUnlockWrIte Buffer()將文檔交給SRTK進行處理。當SRTK收到同步消息文檔後,將調用smlProcessData()進行處理。該接口調用下層模塊解析同步消息文檔,並根據解析結果調用相應的命令處理回調函數完成相應的同步操作。最後,應用程序調用smlTerminatelnstance()結束同步事務。


3 SyncML CIient實現
    鑒於大多數移動終端設備處理能力和存儲能力有限與移動通信網絡窄帶寬、長延時、高成本和不可靠等特點,一般隻能在移動終端設備上實現輕量級的SyncML Client軟件,而且由於移動終端市場的激烈競爭,軟件開發的成本和上市時間等因素已成為相當敏感的指標。SyncML參考工具包由於其權威性、精簡性、良好的可移植性、開放源碼及可以免費使用等特點,成為目前移動終端設備上SyncML Client實現的首選。
3.1 SyncMt CIilent設計
    SyncML參考工具包作為開放源碼的官方實現,為進一步開發SyncML同步軟件提供了良好的起點,但僅僅SyncML參考工具包顯然是遠遠不夠的。本文在SyncML參考工具包的基礎上,研究和實現了工作於移動終端上的SyncMI Client軟件。
    鑒於移動終端平台的多樣性,本軟件可能會被作為獨立的模塊移植到不同的硬件平台和軟件平台上,因此本軟件在設計上盡可能地考慮軟件的移植性。為達到這一目的,本軟件係統采用了分層的設計思想,一方麵盡可能地將SyncML數據同步的主要實現邏輯封裝起來,實現其平台的無關性,另一方麵,分別將對上和對下的與特定軟硬件環境相關的部分獨立出來構成SyncML同步用戶接口層和平台適配層。這樣,在需要進行軟件移植時,開發人員隻需根據特定的軟硬件環境實現相應的SyncML同步用戶接口層和平台適配層,從而在最大程度上保證了移植的方便性和快捷性。除此之外,考慮到移動終端及移動通信網絡的實際狀況,在設計中也充分考慮了嵌入式軟件開發的要求,力爭使係統具有低存儲需求、低時間開銷、高可靠性、高靈活1生、高互操作性和完備的功能實現等特點。
    圖3為移動終端SyncML Cllent軟件的結構設計。SyncML同步用戶接口是軟件的人機交互界麵,它向用戶提供了啟動、中止、配置數據同步的接口,同時用戶也能通過該接口實時獲取同步的狀態信息和結果信息。SyncML同步管理器是整個同步軟件的核心。它根據上層的相關配置信息和命令信息,分析日誌管理模塊記錄的同步對象信息,讀取數據庫中相關同步對象數據並調用SyncML參考工具包生成同步消息,最後調用通信會話管理模塊的API發送同步消息。除此之外,它還接收通信會話管理模塊收到的同步消息,調用SyncML參考工具包進行解析,然後根據解析結果調用數據庫接口修改同步對象信息,同時同步修改日誌信息,最後向上層的SyncML同步用戶接口彙報同步的結果信息。通信會話管理模塊負責同步軟件和SyncML服務器之間的協議交互和消息收發,同時管理本地的會話信息和事務切換工作,相當於SyncML發起組隨SyncML參考工具包一起發布的通信工具包。SyncML參考工具包負責同步消息的生成和解析工作。日誌管理模塊負責記錄同步對象的修改信息,為實現與SyncML服務器的快速同步提供依據。數據庫接口實現同步對象的存取和修改等操作。平台適配層為上述模塊提供必要的係統軟硬件平台信息。

3.2 SyncML CIient實現
    按照上麵的設計方案,我們基於通用的智能手機軟硬件平台實現了SyneML Client軟件。在實際的智能手機軟硬件平台選擇上,基於成本和實際係統需求的考慮,選用了以Epson Slc33209為核心的硬件平台和以Epson ROS33操作係統為核心的軟件平台。開發工具選用了Microsoft Visual C++6和Epson係列編譯、鏈接、下載和調試工具。在下層通信協議的選擇上,我們實現了HTTP和WSP傳輸協議。
    在實際的SyncMI Client實現中,本軟件主要是用於個人信息管(Personal Information Management,PIM)軟件的信息同步。具體地說就是同步移動終端和遠端服務器上的通訊錄和日程安排信息。其中通訊錄信息的編碼格式遵循vCard2.1和vCard 3.O標準,日程安排信息的編碼格式遵循vCanlendar 1.O和iCanlendar 2.0標準。
    為了保證最大程度上的互操作性,使得SyncML Cli_ent軟件能夠與任何符合SyncML數據同步規範的服務器進行數據同步操作,我們嚴格按照SyncML數據同步規範1.1.1版本的一致性要求進行軟件的開發工作。開發出的SyncML Client軟件功能包括:支持雙向同步、慢同步和服務器端請求同步三種同步類型;支持SyncML表示協議中所要求的所有同步客戶端元素類型;支持XML和WBXML兩種格式的同步信息編解碼功能;支持兩種安全認證方式,即基本認證方式和MD5摘要認證方式;支持將大的同步數據包拆分成多個網絡消息發送的機製和Large Objects模式;實現數據庫級的同步錨(Strnc Anchors);支持終端同時和多個服務器同步,本地保留多份同步日誌信息(最多可同時保存5份同步日誌信息)支持用於電子名片交換的vCard 2.1規範和vCard3.0規範;支持用於日曆及行程信息交換的vCalendar l.0規範和iCalendar 2.0規範;支持HTTP和WSP傳輸協議.
    軟件開發過程的一個主要難點是軟件的後期測試平台的構建。當前國內開通的SyncML服務器很少,相關運營商的SyncML服務資料十分匱乏,給軟件的測試帶來了相當的困難。在實際測試中,我們通過構建自己的SyncML服務器和測試環境克服了這一方麵的困難。我們運用Nexthaus SyncJe(tm)Personal Servel,Outlook Edi-tion作為遠端的SyncML同步服務器,同時通過WildPackets EtherPeek NX for Windows分析相應的同步消息,從而能夠在實際的移動網絡中測試SyncML Cli_ent軟件。


結語
    隨著移動計算的日益普及,人們對於移動數據同步的需求正在不斷地增強,在一些領先的移動終端製造商的產品中已經出現SyncMI的蹤影。SyncML參考工具包作為SyncML發起組提供的官方參考實現,其很大程度上加快了SyncML同步軟件的開發和普及。雖然在一定程度上由於其擁有大量API且不友好的開發文檔,入門比較困難,但對於長期的SyncMl同步軟件開發而言,SyncML參考工具包已成為一個相當好的選擇。

(

http://www.autooo.net/icdata/data_48720.html