SyncML Client實(shí)現(xiàn)研究
移動(dòng)通信技術(shù)和計(jì)算機(jī)技術(shù)的進(jìn)步促進(jìn)了移動(dòng)計(jì)算和通信設(shè)備的流行,人們開(kāi)始使用越來(lái)越多而且是各種各樣的移動(dòng)終端設(shè)備進(jìn)行通信,處理和存儲(chǔ)各種數(shù)據(jù)和信息。眾多的終端設(shè)備使得不同設(shè)備間相同的數(shù)據(jù)和信息常常處于不一致的狀態(tài),這就需要進(jìn)行移動(dòng)數(shù)據(jù)同步。在當(dāng)前的移動(dòng)數(shù)據(jù)同步領(lǐng)域,存在著眾多互不兼容的不同廠商各自的數(shù)據(jù)同步標(biāo)準(zhǔn),給最終用戶(hù)、設(shè)備制造商、應(yīng)用程序開(kāi)發(fā)商和服務(wù)提供商帶來(lái)了很多的問(wèn)題。針對(duì)這種混亂的狀況,制定一個(gè)統(tǒng)一的通用數(shù)范必須能夠在任何一種網(wǎng)絡(luò)傳輸協(xié)議之上和任意的數(shù)據(jù)設(shè)備之間同步任何一種協(xié)議所定義的數(shù)據(jù)和信息。
1 SyncML簡(jiǎn)介
SyncML數(shù)據(jù)同步規(guī)范〔1-6〕是由數(shù)據(jù)同步論壇組織一SyncML發(fā)起組(SyncML Initiative)一制定的一個(gè)通用數(shù)據(jù)同步標(biāo)準(zhǔn)。由于SyncML數(shù)據(jù)同步規(guī)范是由國(guó)際上眾多的包括Ericsson、IBM、Lotus、Matsushita、Motorola、Nokia、Openwave和Starfish在內(nèi)的眾多公司,根據(jù)通用數(shù)據(jù)同步規(guī)范的要求共同制定完成的,所以該規(guī)范目前已經(jīng)成為一個(gè)被廣泛接受的工業(yè)界通用的同步
協(xié)議標(biāo)準(zhǔn)。國(guó)際電信聯(lián)盟已認(rèn)可其為下一代移動(dòng)通信標(biāo)準(zhǔn)的組成部分。
SyncML數(shù)據(jù)同步規(guī)范主要包括3個(gè)部分,即SyncML同步協(xié)議(SyncML Sync Protoc01)、SyncML表示協(xié)議(SyncML Representation Protoc01)和SyncML的傳輸方式綁定(目前僅包括SyncML HTTP Binding、SyncML OBEXBinding和SyncML WSP Binding)。SyncML同步協(xié)議主要定義了數(shù)據(jù)同步操作的會(huì)話流程、會(huì)話過(guò)程中的數(shù)據(jù)交互過(guò)程、同步雙方的握手過(guò)程及數(shù)據(jù)同步的類(lèi)型等SYncML表示協(xié)議主要定義了同步所支持的數(shù)據(jù)類(lèi)型、命令格式以及在各種網(wǎng)絡(luò)上傳輸?shù)腟YncML消息格式。SyncML消息可以在任何一種有線和無(wú)線的網(wǎng)絡(luò)上傳輸,在SYncML協(xié)議的傳輸方式綁定中定義了在HTT P(HyperText Transfer Protocol,超文本傳輸協(xié)議)、WSP(Wireless Session Protocol,無(wú)線會(huì)話協(xié)議)、OBEX(Object Exchange Protocol,對(duì)象交換協(xié)議)三種協(xié)議的網(wǎng)絡(luò)鏈接上傳輸SyncML消息的方式。這三種傳輸協(xié)議基本上涵蓋了所有的遠(yuǎn)程和短程連接。
在SyncML同步協(xié)議中,定義了SyncML客戶(hù)端和SyncML服務(wù)器端之間消息的交互過(guò)程,包括同步雙方數(shù)據(jù)標(biāo)識(shí)符的定義及映射、數(shù)據(jù)庫(kù)修改數(shù)據(jù)時(shí)的安全措施等。定義的數(shù)據(jù)同步類(lèi)型包括雙向同步(two-way wync)、慢同步(slow syne)、客戶(hù)端發(fā)起單向同步(one-way sync from client only)、客戶(hù)端發(fā)起刷新同步(refresh sync from client only)、服務(wù)器端發(fā)起單向同步(one-way sync from server only)、服務(wù)器端發(fā)起刷新同步(refresh syne from server only)、服務(wù)器端請(qǐng)求同步(server alerted sync)等。圖1說(shuō)明了SyncML客戶(hù)端和服務(wù)器端同步時(shí)的消息交互情況,其中移動(dòng)電話作為SyncML同步的客戶(hù)端, 一臺(tái)網(wǎng)絡(luò)服務(wù)器作為SyncML同步的服務(wù)器端。移動(dòng)電話發(fā)送包含數(shù)據(jù)修改信息的SyncML消息給網(wǎng)絡(luò)服務(wù)器, 網(wǎng)絡(luò)服務(wù)器根據(jù)SyncML消息中的數(shù)據(jù)進(jìn)行各種同步操作, 同步服務(wù)器中存儲(chǔ)的數(shù)據(jù), 然后把修改結(jié)果信息回應(yīng)給移動(dòng)電話。
2 SRTK分析
為了方便SyncML數(shù)據(jù)同步規(guī)范的推廣和實(shí)現(xiàn), 同時(shí)也為了驗(yàn)證sYncML數(shù)據(jù)同步規(guī)范的可實(shí)現(xiàn)性,SyncML發(fā)起組發(fā)布了一個(gè)開(kāi)放源碼的SyncML參考實(shí)現(xiàn)—SyncML參考工具包。該工具包用C語(yǔ)言進(jìn)行開(kāi)發(fā),包含一個(gè)綜合的C庫(kù),用于創(chuàng)建、發(fā)送、接收和解析SyncML消息。SRTK是一個(gè)比較成熟的產(chǎn)品。 可以在Windows平臺(tái)和Linux平臺(tái)上編譯。此外,它還為EPOC平臺(tái)和Palm平臺(tái)預(yù)留了接口。它支持XML和WBXML編碼,支持HTTP(用于Web上的同步)、WSP(在WAP上使用)和0BEX(在IrDA或藍(lán)牙上使用)傳輸。目前,SyncML參考工具包是在SourceForge(http://sourceforge.nct/)上托管的,項(xiàng)目名稱(chēng)為SyncML C T00lkit,最新版本為4.3版(發(fā)布于2003年10月27日)。
2.1 SRTK總體結(jié)構(gòu)
SyncML參考工具包的外部結(jié)構(gòu)和內(nèi)部總體結(jié)構(gòu)如圖2所示。SyncML Reference Implementation(即SyncML參考工具包)通過(guò)一系列應(yīng)用編程接口為上層應(yīng)用程序提供數(shù)據(jù)同步服務(wù),上層應(yīng)用程序通過(guò)傳輸處理接口使用獨(dú)立的網(wǎng)絡(luò)傳輸模塊完成數(shù)據(jù)收發(fā)工作。應(yīng)用層除了使用下層提供的API外,還必須向下層的網(wǎng)絡(luò)傳輸模塊和SRTK提供一系列的回調(diào)函數(shù),以完成錯(cuò)誤處理、同步命令處理及SyncML消息分片傳輸?shù)裙δ堋?/P>
由于SRTK主要實(shí)現(xiàn)的是SyncML消息的創(chuàng)建、解析及相關(guān)事務(wù)處理等功能,其本身并不具備網(wǎng)絡(luò)數(shù)據(jù)收發(fā)功能,故上層應(yīng)用程序需要利用獨(dú)立的網(wǎng)絡(luò)傳輸來(lái)實(shí)現(xiàn)數(shù)據(jù)同步功能。在SRTK的實(shí)際開(kāi)發(fā)中,為了方便在SyncML參考工具包的基礎(chǔ)上進(jìn)行相關(guān)同步應(yīng)用程序的開(kāi)發(fā),SyncML發(fā)起組在編寫(xiě)SRTK的同時(shí),也實(shí)現(xiàn)了能夠進(jìn)行HTTP、WSP和0BEX傳輸?shù)耐ㄐ殴ぞ甙?Communication Toolkit),并與SyncML工具包一起發(fā)布。
SyncML參考工具包的內(nèi)部實(shí)現(xiàn)結(jié)構(gòu)主要分為三層,分別為SyncML核心層、SyncML插件層和SyncML基本庫(kù)層。SyncML核心層主要實(shí)現(xiàn)供應(yīng)用層調(diào)用的SyncML參考實(shí)現(xiàn)接口。這一層獨(dú)立于具體的系統(tǒng)平臺(tái), 主要包括三個(gè)部分:SyncML事務(wù)管理模塊, 主要負(fù)責(zé)同步事務(wù)管理, 包括多同步的協(xié)調(diào)、工作區(qū)緩存的訪IN控制和同步收發(fā)模式的切換等;SyncML命令生成模塊,主要負(fù)責(zé)生成SYncML同步消息, 僅用于同步發(fā)送模式;SyncML命令處理模塊,主要負(fù)責(zé)解析收到的SyncML同步消息并調(diào)用應(yīng)用層提供的回調(diào)函數(shù)完成相應(yīng)的同步操作,僅用于同步接收模式。中間的SyncML插件層主要實(shí)現(xiàn)一系列供SyncML核心層調(diào)用的下層功能,主要包括兩個(gè)部分, 即SyncML工作區(qū)管理模塊(負(fù)責(zé)用于存放svncML消息的工作區(qū)緩存的分配和回收工作)和SyncML編解碼模塊(負(fù)責(zé)XML或WBXML格式的SyncML消息的編碼或解析工作)。在SyncML參考工具包中,該層根據(jù)具體的運(yùn)行平臺(tái)進(jìn)行了一定程度的優(yōu)化。由于其被設(shè)計(jì)成插件層,所以它允許同時(shí)有多個(gè)SyncML工作區(qū)管理模塊或SyncML編解碼模塊存在,實(shí)際的同步實(shí)現(xiàn)可以根據(jù)不同情況調(diào)用不同的插件。最下一層是SyncML基本庫(kù)層,主要實(shí)現(xiàn)底層的諸如存儲(chǔ)管理、字符串處理等功能。這一層的主要作用是增強(qiáng)實(shí)現(xiàn)的可移植性。
2.2 SRTK同步模式
根據(jù)SyncML同步角色的差異,SyncML參考工具包分別工作于兩種不同的模式:當(dāng)SyncML同步軟件作為同步消息的發(fā)起者時(shí),SyncML參考工具包工作于同步發(fā)送模式,此時(shí)SyncML命令處理模塊處于不工作狀態(tài);當(dāng)SyncML同步軟件作為同步消息的接收者時(shí),SyncML參考工具包工作于同步接收模式,此時(shí)SyncML命令生成模塊處于不工作狀態(tài)。
2.2.1 同步發(fā)送模式
當(dāng)需要發(fā)起SyncML同步(客戶(hù)端)或回應(yīng)對(duì)方的SyncML同步(服務(wù)器端)時(shí),SyncML事務(wù)管理模塊將使SRTK工作于同步發(fā)送模式。首先,應(yīng)用程序調(diào)用smllnitlnstane(),創(chuàng)建一個(gè)SyncMI同步事務(wù)(同時(shí)為其分配工作區(qū)緩存),必要的情況下可以調(diào)用SyncSetSeesion Options(),設(shè)置同步事務(wù)的參數(shù)。當(dāng)事務(wù)被成功創(chuàng)建之后,應(yīng)用程序就可以調(diào)用smlStarMessage(),開(kāi)始創(chuàng)建同步消息文檔。當(dāng)應(yīng)用程序完成相關(guān)同步命令后,調(diào)用接口smlEndMessage(),結(jié)束同步消息文檔的創(chuàng)建工作。在這兩個(gè)接口調(diào)用之間,應(yīng)用程序可以根據(jù)不同的同步操作命令調(diào)用不同的接口,向同步消息文檔中添加同步命令信息。當(dāng)應(yīng)用程序完成同步消息文檔的創(chuàng)建工作以后, 應(yīng)用程序就可以調(diào)用smILockReadButffer()鎖定工作區(qū)緩存,同時(shí)獲取生成的同步消息文檔。之后,就可以調(diào)用網(wǎng)絡(luò)傳輸模塊的xptSendData()發(fā)送同步消息,發(fā)送完成后應(yīng)用程序必須調(diào)用smlUnlockReadBuffer(),將工作區(qū)緩存解鎖并釋放工作區(qū)緩存。最后,應(yīng)用程序調(diào)用smlTerminatelnstance(),結(jié)束同步事務(wù)。
2.2.2同步接收模式
當(dāng)需要接收對(duì)方的SyncML同步回應(yīng)(客戶(hù)端)或接收對(duì)方發(fā)起的SyncML同步(服務(wù)器端)時(shí),SyncMI事務(wù)管理模塊將使SRTK工作于同步接收模式。首先,應(yīng)用程序調(diào)用smllnitlnstance()創(chuàng)建一個(gè)SyncMI同步事務(wù)(同時(shí)為其分配工作區(qū)緩存)。必要的情況下可以調(diào)用SyncSetSeesionOptions(),設(shè)置同步事務(wù)的參數(shù)。當(dāng)事務(wù)被成功創(chuàng)建之后,應(yīng)用程序就可以調(diào)用smlLockWrite Buffer()鎖定工作區(qū)緩存,同時(shí)利用接口xptReceiveData()接收同步消息文檔并保存到工作區(qū)緩存中。當(dāng)應(yīng)用程序完成同步消息文檔的接收后調(diào)用接口smlUnlockWrIte Buffer()將文檔交給SRTK進(jìn)行處理。當(dāng)SRTK收到同步消息文檔后,將調(diào)用smlProcessData()進(jìn)行處理。該接口調(diào)用下層模塊解析同步消息文檔,并根據(jù)解析結(jié)果調(diào)用相應(yīng)的命令處理回調(diào)函數(shù)完成相應(yīng)的同步操作。最后,應(yīng)用程序調(diào)用smlTerminatelnstance()結(jié)束同步事務(wù)。
3 SyncML CIient實(shí)現(xiàn)
鑒于大多數(shù)移動(dòng)終端設(shè)備處理能力和存儲(chǔ)能力有限與移動(dòng)通信網(wǎng)絡(luò)窄帶寬、長(zhǎng)延時(shí)、高成本和不可靠等特點(diǎn),一般只能在移動(dòng)終端設(shè)備上實(shí)現(xiàn)輕量級(jí)的SyncML Client軟件,而且由于移動(dòng)終端市場(chǎng)的激烈競(jìng)爭(zhēng),軟件開(kāi)發(fā)的成本和上市時(shí)間等因素已成為相當(dāng)敏感的指標(biāo)。SyncML參考工具包由于其權(quán)威性、精簡(jiǎn)性、良好的可移植性、開(kāi)放源碼及可以免費(fèi)使用等特點(diǎn),成為目前移動(dòng)終端設(shè)備上SyncML Client實(shí)現(xiàn)的首選。
3.1 SyncMt CIilent設(shè)計(jì)
SyncML參考工具包作為開(kāi)放源碼的官方實(shí)現(xiàn),為進(jìn)一步開(kāi)發(fā)SyncML同步軟件提供了良好的起點(diǎn),但僅僅SyncML參考工具包顯然是遠(yuǎn)遠(yuǎn)不夠的。本文在SyncML參考工具包的基礎(chǔ)上,研究和實(shí)現(xiàn)了工作于移動(dòng)終端上的SyncMI Client軟件。
鑒于移動(dòng)終端平臺(tái)的多樣性,本軟件可能會(huì)被作為獨(dú)立的模塊移植到不同的硬件平臺(tái)和軟件平臺(tái)上,因此本軟件在設(shè)計(jì)上盡可能地考慮軟件的移植性。為達(dá)到這一目的,本軟件系統(tǒng)采用了分層的設(shè)計(jì)思想,一方面盡可能地將SyncML數(shù)據(jù)同步的主要實(shí)現(xiàn)邏輯封裝起來(lái),實(shí)現(xiàn)其平臺(tái)的無(wú)關(guān)性,另一方面,分別將對(duì)上和對(duì)下的與特定軟硬件環(huán)境相關(guān)的部分獨(dú)立出來(lái)構(gòu)成SyncML同步用戶(hù)接口層和平臺(tái)適配層。這樣,在需要進(jìn)行軟件移植時(shí),開(kāi)發(fā)人員只需根據(jù)特定的軟硬件環(huán)境實(shí)現(xiàn)相應(yīng)的SyncML同步用戶(hù)接口層和平臺(tái)適配層,從而在最大程度上保證了移植的方便性和快捷性。除此之外,考慮到移動(dòng)終端及移動(dòng)通信網(wǎng)絡(luò)的實(shí)際狀況,在設(shè)計(jì)中也充分考慮了嵌入式軟件開(kāi)發(fā)的要求,力爭(zhēng)使系統(tǒng)具有低存儲(chǔ)需求、低時(shí)間開(kāi)銷(xiāo)、高可靠性、高靈活1生、高互操作性和完備的功能實(shí)現(xiàn)等特點(diǎn)。
圖3為移動(dòng)終端SyncML Cllent軟件的結(jié)構(gòu)設(shè)計(jì)。SyncML同步用戶(hù)接口是軟件的人機(jī)交互界面,它向用戶(hù)提供了啟動(dòng)、中止、配置數(shù)據(jù)同步的接口,同時(shí)用戶(hù)也能通過(guò)該接口實(shí)時(shí)獲取同步的狀態(tài)信息和結(jié)果信息。SyncML同步管理器是整個(gè)同步軟件的核心。它根據(jù)上層的相關(guān)配置信息和命令信息,分析日志管理模塊記錄的同步對(duì)象信息,讀取數(shù)據(jù)庫(kù)中相關(guān)同步對(duì)象數(shù)據(jù)并調(diào)用SyncML參考工具包生成同步消息,最后調(diào)用通信會(huì)話管理模塊的API發(fā)送同步消息。除此之外,它還接收通信會(huì)話管理模塊收到的同步消息,調(diào)用SyncML參考工具包進(jìn)行解析,然后根據(jù)解析結(jié)果調(diào)用數(shù)據(jù)庫(kù)接口修改同步對(duì)象信息,同時(shí)同步修改日志信息,最后向上層的SyncML同步用戶(hù)接口匯報(bào)同步的結(jié)果信息。通信會(huì)話管理模塊負(fù)責(zé)同步軟件和SyncML服務(wù)器之間的協(xié)議交互和消息收發(fā),同時(shí)管理本地的會(huì)話信息和事務(wù)切換工作,相當(dāng)于SyncML發(fā)起組隨SyncML參考工具包一起發(fā)布的通信工具包。SyncML參考工具包負(fù)責(zé)同步消息的生成和解析工作。日志管理模塊負(fù)責(zé)記錄同步對(duì)象的修改信息,為實(shí)現(xiàn)與SyncML服務(wù)器的快速同步提供依據(jù)。數(shù)據(jù)庫(kù)接口實(shí)現(xiàn)同步對(duì)象的存取和修改等操作。平臺(tái)適配層為上述模塊提供必要的系統(tǒng)軟硬件平臺(tái)信息。
3.2 SyncML CIient實(shí)現(xiàn)
按照上面的設(shè)計(jì)方案,我們基于通用的智能手機(jī)軟硬件平臺(tái)實(shí)現(xiàn)了SyneML Client軟件。在實(shí)際的智能手機(jī)軟硬件平臺(tái)選擇上,基于成本和實(shí)際系統(tǒng)需求的考慮,選用了以Epson Slc33209為核心的硬件平臺(tái)和以Epson ROS33操作系統(tǒng)為核心的軟件平臺(tái)。開(kāi)發(fā)工具選用了Microsoft Visual C++6和Epson系列編譯、鏈接、下載和調(diào)試工具。在下層通信協(xié)議的選擇上,我們實(shí)現(xiàn)了HTTP和WSP傳輸協(xié)議。
在實(shí)際的SyncMI Client實(shí)現(xiàn)中,本軟件主要是用于個(gè)人信息管(Personal Information Management,PIM)軟件的信息同步。具體地說(shuō)就是同步移動(dòng)終端和遠(yuǎn)端服務(wù)器上的通訊錄和日程安排信息。其中通訊錄信息的編碼格式遵循vCard2.1和vCard 3.O標(biāo)準(zhǔn),日程安排信息的編碼格式遵循vCanlendar 1.O和iCanlendar 2.0標(biāo)準(zhǔn)。
為了保證最大程度上的互操作性,使得SyncML Cli_ent軟件能夠與任何符合SyncML數(shù)據(jù)同步規(guī)范的服務(wù)器進(jìn)行數(shù)據(jù)同步操作,我們嚴(yán)格按照SyncML數(shù)據(jù)同步規(guī)范1.1.1版本的一致性要求進(jìn)行軟件的開(kāi)發(fā)工作。開(kāi)發(fā)出的SyncML Client軟件功能包括:支持雙向同步、慢同步和服務(wù)器端請(qǐng)求同步三種同步類(lèi)型;支持SyncML表示協(xié)議中所要求的所有同步客戶(hù)端元素類(lèi)型;支持XML和WBXML兩種格式的同步信息編解碼功能;支持兩種安全認(rèn)證方式,即基本認(rèn)證方式和MD5摘要認(rèn)證方式;支持將大的同步數(shù)據(jù)包拆分成多個(gè)網(wǎng)絡(luò)消息發(fā)送的機(jī)制和Large Objects模式;實(shí)現(xiàn)數(shù)據(jù)庫(kù)級(jí)的同步錨(Strnc Anchors);支持終端同時(shí)和多個(gè)服務(wù)器同步,本地保留多份同步日志信息(最多可同時(shí)保存5份同步日志信息)支持用于電子名片交換的vCard 2.1規(guī)范和vCard3.0規(guī)范;支持用于日歷及行程信息交換的vCalendar l.0規(guī)范和iCalendar 2.0規(guī)范;支持HTTP和WSP傳輸協(xié)議.
軟件開(kāi)發(fā)過(guò)程的一個(gè)主要難點(diǎn)是軟件的后期測(cè)試平臺(tái)的構(gòu)建。當(dāng)前國(guó)內(nèi)開(kāi)通的SyncML服務(wù)器很少,相關(guān)運(yùn)營(yíng)商的SyncML服務(wù)資料十分匱乏,給軟件的測(cè)試帶來(lái)了相當(dāng)?shù)睦щy。在實(shí)際測(cè)試中,我們通過(guò)構(gòu)建自己的SyncML服務(wù)器和測(cè)試環(huán)境克服了這一方面的困難。我們運(yùn)用Nexthaus SyncJe(tm)Personal Servel,Outlook Edi-tion作為遠(yuǎn)端的SyncML同步服務(wù)器,同時(shí)通過(guò)WildPackets EtherPeek NX for Windows分析相應(yīng)的同步消息,從而能夠在實(shí)際的移動(dòng)網(wǎng)絡(luò)中測(cè)試SyncML Cli_ent軟件。
結(jié)語(yǔ)
隨著移動(dòng)計(jì)算的日益普及,人們對(duì)于移動(dòng)數(shù)據(jù)同步的需求正在不斷地增強(qiáng),在一些領(lǐng)先的移動(dòng)終端制造商的產(chǎn)品中已經(jīng)出現(xiàn)SyncMI的蹤影。SyncML參考工具包作為SyncML發(fā)起組提供的官方參考實(shí)現(xiàn),其很大程度上加快了SyncML同步軟件的開(kāi)發(fā)和普及。雖然在一定程度上由于其擁有大量API且不友好的開(kāi)發(fā)文檔,入門(mén)比較困難,但對(duì)于長(zhǎng)期的SyncMl同步軟件開(kāi)發(fā)而言,SyncML參考工具包已成為一個(gè)相當(dāng)好的選擇。