移动通信技术和计算机技术的进步促进了移动计算和通信设备的流行,人们开始使用越来越多而且是各种各样的移动终端设备进行通信,处理和存储各种数据和信息。众多的终端设备使得不同设备间相同的数据和信息常常处于不一致的状态,这就需要进行移动数据同步。在当前的移动数据同步领域,存在着众多互不兼容的不同厂商各自的数据同步标准,给最终用户、设备制造商、应用程序开发商和服务提供商带来了很多的问题。针对这种混乱的状况,制定一个统一的通用数范必须能够在任何一种网络传输协议之上和任意的数据设备之间同步任何一种协议所定义的数据和信息。
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参考工具包已成为一个相当好的选择。