华's profile努力工作,享受简单的生活。PhotosBlogListsMore ![]() | Help |
|
March 15 漫漫器材发烧路(转)
December 01 论放弃这个标题源自前段时间读了一下《圣经》之《马太福音》,当然这里没有里面的风格,
我决定放弃.........
我不得不放弃...........
放弃其实很需要勇气,
因为放弃一个自己喜欢的东西
放弃一个自己为之付出了很多心血的东西——当然有时并不是一个可以量化的东西,比如感情
而且
放弃似乎表明自己无法应对挑战
放弃似乎表明了一种无奈
可是有些东西,或许本来就不是我们的
可是有些事情,本来就是一种错误
我无法证明我现在的想法是正确的
但是我看不到明显的希望,或者说我看不到一个向着好的方向发展的迹象
或许这就是我的理由,
我想我不会后悔,我一定不会后悔
就这样,写出来算是一种正式的公告................ November 25 说说计划说说计划,源于今天查找资料的时候看到一个人在BLOG上写的10年计划,说要花10年时间,将中国的古籍有计划的读一读,侧重历史。列了一些书目...................
觉得这样的计划真不错....................
然后突然想到,其实自己前不久也有这样的打算:计划用2年或者更长的时间,研读一下哲学。
可是,可是................
记得那应该是7月份的事情
好像已经有4个月过去了,可是一本《中国哲学简史》,一本....,名字都不记得了
就做了这么一点事情,如果说理由,肯定很多:工作忙啊之类的
但是我们好像不应该给自己这样找理由,
因为很多时候也是在那里闲着无聊看电视
因为有时候也是无聊的在那里跟别人调侃
..................
有时候想想,
生命中很多东西就是因为我们的不坚持而慢慢消失了
生命中很多东西就是因为我们的不在意而不被我们发现
..................
我并不是一个有很大目标的人,或许更多的是希望能够好好的享受生活
但是生活也应该是丰富的,是能够留下很多美丽回忆的
是在一段时间以后,没有感慨:这段时间怎么过的这么郁闷啊?这段时间怎么好像什么也没有做啊?
是在若干年以后,没有遗憾:.......................
说了这么多,是在上班时间,想到了,不得不发
说出来,也算是留下一个见证:我要坚持我的计划:回去之后一定继续
现广告天下,算是给自己一个压力
努力工作,努力享受简单的生活...........
看来我的BLOG名字得改改,呵呵....................... SyncML 简介SyncML 简介 姜君 蓝点软件北京研发中心工程师 内容: SyncML协议简述 SyncML 底层通讯 SyncML同步协议 SyncML表示协议 SyncML 参考工具包 相关资源 作者 目前在嵌入式系统与其他通信设备的数据同步方面,业界还没有统一的标准、协议。为了解决这个问题,IBM、Lotus、Motorola、Nokia、Palm Inc、Psion、Starfish Software已经形成了SyncML协议的标准草案。这个草案将会发展成为一个通用的可以被用在工业界的同步协议。本文简单介绍了SyncML协议与应用该协议的工具包。 1 SyncML协议简述 目前,移动计算和通信设备的流行很大部分原因是因为它们具有一些方便的功能,比如说在需要时可以发送信息给其他用户,用户希望随时随地都可以利用掌上设备访问信息和执行应用程序,甚至在飞行中也可以获得和更新信息。 具有在一台掌上设备运行应用程序和处理信息、还可以将应用程序和信息的更新同步回到办公室的设备或者网上的这种能力对于普遍、离线计算的效用和流行是一个关键。 遗憾的是,到今天为止还有两种方式没有实现: 支持任何移动设备同步的网络数据 支持同步人和网络数据的移动设备 这样一来,需要为移动设备增加很多用来同步不同的,尽可能多的数据所需要的协议,这些协议中的每一个仅适用于在一个选定的设备子集上进行选定的传输和运行,并且可以访问一部分网络数据,单一同步标准的缺乏为最终用户、设备制造商、应用程序开发者和设备提供商制造了很多问题 SyncML是一个新的标准,为了开发一个简单、通用的可以用于工业界方面的数据同步协议,推进这个标准的有IBM、Lotus、Motorola、Nokia、Palm Inc、Psion、Stafish Software。其他的公司、企业不断的被补充进来。 1.1 通用同步协议的优点 下面让我们看看适合工业界范围的数据同步协议对于每组角色的有益之处。 1. 最终用户:今天移动设备用户可能在每一种设备上使用了不同的同步产品。这样就会,有一种程序用来在膝上电脑和网络数据之间同步文件,另一种用来同步掌上电脑的日历,还有远程email访问,每一种技术只能用来同步少数应用程序或者被限制成特殊类型的网络连接。这种安排安装昂贵、配置和操作复杂、管理昂贵。使用SyncML,用户可以购买可以使用广泛的数据类型的设备。 2. 设备制造商:当每一个设备制造商想要支持这种能支持所有用户和服务提供商进行数据访问的技术。实际上一个设备会支持一种数据同步技术。这种选择迫使制造商压缩存储空间、内存、电源的用量和消耗。设备制造商会从通用的协议中获得好处,这种通用的协议使设备共同使用广泛的应用程序、服务、网络和传输技术。 3. 服务提供商:正在进入快速增长的应用程序舞台的服务提供商非常关注这样一个现象,即同步技术的增多会使在有效的成本下扩展用户和支持用户成为不可能。现在服务提供商已经支持一定范围的数据类型和应用中的设备;还必须安装、配置多种服务的基础结构,维护和支持这些基础结构,并且保证兼容性和性能。现在可选的是利用单独的数据连通方案,陷入了避免紧密结合的私有解决方案。使用SyncML,将会使提供支持广阔的应用程序的连接成为可能。 4. 应用程序开发者:选择支持多种同步技术可以使应用程序支持更多的设备类型 和网络数据,但是这种选择有一些浪费。为了保持向下兼容性开发者失去了选择网络数据仓库的灵活性,这也会增加程序开发的消耗和最终产品的复杂性。增加了复杂性的网络数据仓库对服务供应商的安装和采用是一个障碍。使用SyncML,可以开发能连接更多设备集合和网络数据的应用程序。 1.2 通用同步协议的描述 通用同步协议的目标是普遍适用,同步两端可以是任何一种类型、在任一种网络上面,这样会: 同步网络数据与任一种移动设备 同步移动设备与任一种网络数据 数据同步协议会同步网络数据和很多不同的设备,包括掌上电脑、移动电话、自动计算机和桌面计算机。一个用户可以在不同的设备上访问、操作同样的数据集合,举个例子,用户可以使用掌上设备或者移动电话阅读电子邮件,还可以维护一个一致的、更新的纪录。 同样的,同步两端可以使用任意类型,这使得移动设备可以支持更多数据类型,包括电子邮件、日历、事务管理信息、数据库中的企业数据和Web文档。这种功能使得想要通过电子邮件接收订单的用户可以在同样的设备上访问公司的目录清单系统,用来最后决定交付日期。 实现这个目标,协议需要下列特性: 可以有效的在有线和无线网络上运作 支持多种传输协议 支持任意的网络数据 可由多种应用程序访问 考虑到移动设备的资源限制 构造于现有的全球互联网和Web技术之上 协议最小功能就是赋予所有设备最常用的同步能力 2 SyncML 底层通讯 2.1 绑定Http 2.1.1 Tcp 传输服务 Http通信一般是在 Tcp连接之上的,这个绑定不是必需的,如果Http基于其它的协议,那么需求也和下面Tcp定义的相似 2.1.1.1 连接 在Http客户端连接到Http服务器端的时候,SyncML客户端建立一个Tcp连接在客户和服务器之间通过使用Tcp open操作,在超时的情况下还需要SyncML客户端从新建立连接。 2.1.1.2连接选项 关于端口和协议版本的一些选项。 2.1.1.3 断开连接 当连接不需要的时候,SyncML客户端负责使用tcp close操作结束连接。如果固定连接存在于Http请求中,Http连接的关闭有Http客户端来完成,当Http客户端接收到来自服务器的Http应答中指明这是最后一个SyncML的包。 2.1.1.4 终止 有时候非正常时间发生会要求应用程序中断Tcp连接,这种情况下,Tcp从新初始化来结束当前连接。 2.1.1.5 超时 当服务器超时,SyncML客户端需要重建一个新的HTTP会话并且Http服务器端会尝试从新发送当前的SyncML包 2.1.2. SyncML信息交换 一旦Http连接建立,一个或者多个SyncML消息会通过连接由SyncML客户端传输,它们存在于Http客户端的请求或者Http服务器端的应答中。 在Http请求中POST方法用来传递SyncML消息。 2.1.2.1 每包一个消息 下面是Http请求的部分代码: POST ./servlet/syncit HTTP/1.1 Host: www.datasync.org Content-Type: application/vnd.syncml-xml; charset="utf-8" Content0Length: 1023 Accept: application/vnd.syncml-xml 下面是Http应答的部分代码: HTTP/1.1 200 ok Content-Type: application/vnd.syncml-wbxml; charset="utf-8" Content-LengthL 1023 --HTTP body--- 2.1.2.2 一个包里包含多个消息 每一个Sync消息必须使用SyncML MIME媒体类型在HTTP请求或应答中传递,当每个包里有多个SyncML消息的时候,每一个消息是否在分离的HTTP请求或应答传递依赖于它是否是SyncML的请求和应答。可以根据每一个SyncML消息是否有最后一个元素来判断这个包中是否有更多的SyncML消息,如够有最后一个元素,那么这消息就是该包中最后一个消息。 2.1.3 传输命令 HTTP使用一系列的命令,包括传输方法,头部信息,请求的头部信息,应答的头部信息 2.1.3.1 传输方法 SyncML客户端必须使用POST方法或者可以使用CONNECT方法(如果支持的话)来给SyncML服务器发送SyncML请求。CONNECT方法用来初始化SSL会话以验证HTTP客户和服务器,其他的方法目前没有用在SyncML客户端。 2.2 绑定Obex 2.3 绑定Wsp 3 SyncML同步协议 3.1 动机: 表示协议并不足够来实现信息的交互性 可以在多种设备之间传输多种格式的数据 3.2 设计原则 满足网络延迟的需要 满足各种设备 满足现有的各种储存模式 满足多种安全需求 多种使用模式 3.3 Sync 类型 3.3.1双向同步 客户端和服务器端双向传输信息 在特殊情况下采用Slow sync 作为传输模式 3.3.2 客户端单向同步 只有客户端提出修改信息 特殊情况下,数据可以被输出 3.3.3 服务器端单向同步 只有服务器端提出修改信息 特殊情况下,数据可以被输入 3.3.4 服务器端通告 同步要求从服务器端传到客户端 3.3.5 双向同步例子 日历的同步传输 客户端的认证请求被接受 客户端传送两条信息 服务器端传送一条信息 服务器端和客户端的数据一致会立刻完成 下面是一个例子,描述同步传输的大体过程。同步传输有七种方式,下面的例子是双向传输,最复杂的一种。首先进行初始的准备工作,然后进行传输,再进行确认。 3.3.5.1客户端发出同步请求 <SyncML> 相当于同步的头文件,基本为固定模式 <SyncHdr> <VerDTD>1.0</VerDTD> <VerProto>SyncML/1.0</VerProto> <SessionID>1</SessionID> <MsgID>1</MsgID> 同步初始化时数值为一,相当于第几个回合 目标地址 <Target><LocURI>http://www.syncml.org/sync-server</LocURI></Target> 源地址 <Source><LocURI>IMEI:493005/10/059280/0</LocURI></Source> 认证 <Cred> <!--The authentication is optional.--> 认证模式 <Meta><Type xmlns='syncml:metinf'>syncml:auth-basic</Type></Meta> 相当于密码 <Data>dXNlcmlkOnBhc3N3b3Jk=</Data> <!--base64 formatting of "userid:password"--> </Cred> <Meta> <!--The Meta is now used to indicate the maximum SyncML message size, which client can receive.--> <mi:MaxMsgSize xmlns:mi='syncml:metinf'>5000</mi:MaxMsgSize> </Meta> </SyncHdr> 头文件结束 <SyncBody> 唤醒对方,相当于发出信号 <Alert> <CmdID>1</CmdID> 命令ID为1 <Data>200</Data> <!-- 200 = TWO_WAY_ALERT --> 共有七种连接方式,200代表其中一种 <Item> <Target><LocURI>./contacts/james_bond</LocURI></Target> 进行操作的目标和地址,相当于数据库 <Source><LocURI>./dev-contacts</LocURI></Source> <Meta> 相当于认证 <Anchor xmlns='syncml:metinf'> <Last>234</Last> <Next>276</Next> </Anchor> </Meta> </Item> </Alert> 上传 <Put> <CmdID>2</CmdID> <Meta><Type xmlns='syncml:metinf'>application/xml</Type></Meta> 固定的格式 <Item> <Source><LocURI> devinf10</LocURI></Source> 固定的格式 <Data> <DevInf xmlns='syncml:devinf'> 相当于本地的数据描述 <Man>Big Factory, Ltd.</Man> <Mod>4119</Mod> <OEM>Jane's phones</OEM> <FwV>2.0e</FwV> <SwV>2.0</SwV> <HwV>1.22I</HwV> <DevId>1218182THD000001-2</DevId> <DevTyp>phone</DevTyp> <DataStore> <SourceRef>./contacts</SourceRef> <DisplayName>Phonebook</DisplayName> <MaxGUIDSize>32</MaxGUIDSize>GUID 相当于索引 <Rx-Pref> <CTType>text/x-vcard </CTType> <VerCT>2.1</VerCT> </Rx-Pref> <Tx-Pref> <CTType>text/x-vcard</CTType> <VerCT>2.1</VerCT> </Tx-Pref> 数据存储能力 <DSMem> <MaxMem>32650</MaxMem> <MaxID>250</MaxID> <FreeMem>22430</FreeMem> <FreeID>122</FreeID> </DSMem> </DataStore> <CTCap> <CTType>text/x-vcard</CTType> <PropName>BEGIN</PropName> <ValEnum>VCARD</ValEnum> <PropName>END</PropName> <ValEnum>VCARD</ValEnum> <PropName>VERSION</PropName> <ValEnum>2.1</ValEnum> <PropName>N</PropName> <PropName>TEL</PropName> <ParamName>VOICE</ParamName> <ParamName>CELL</ParamName> </CTCap> <SyncCap> <SyncType>01</SyncType> <SyncType>02</SyncType> </SyncCap> </DevInf> </Data> </Item> </Put> <Get> <CmdID>3</CmdID> <Meta><Type xmlns='syncml:metinf'>application/xml</Type></Meta> <Item> <Target><LocURI> devinf10</LocURI></Target> </Item> </Get> <Final/> </SyncBody> </SyncML> 3.3.5.2服务器端发出同步请求 <SyncML> 头文件 <SyncHdr> <VerDTD>1.0</VerDTD> <VerProto>SyncML/1.0</VerProto> <SessionID>1</SessionID> <MsgID>1</MsgID> <Target><LocURI>IMEI:493005/10/059280/0</LocURI></Target> <Source><LocURI>http://www.syncml.org/sync-server</LocURI></Source> <Cred> <!--The authentication is optional.--> <Meta><Type xmlns='syncml:metinf'>syncml:auth-basic</Type></Meta> <Data>dXNlcmlkOnBhc3N3b3Jk=</Data> <!--base64 formatting of "userid:password"--> </Cred> </SyncHdr> <SyncBody> 相当于回复客户端请求 回复头文件 <Status> <MsgRef>1</MsgRef><CmdRef>0</CmdRef><Cmd>SyncHdr</Cmd> <TargetRef>http://www.syncml.org/sync-server</TargetRef> <SourceRef>IMEI:493005/10/059280/0</SourceRef> 212代表正常 <Data>212</Data> <!--Statuscode for OK, authenticated for session--> </Status> 回复Alert <Status> <MsgRef>1</MsgRef><CmdRef>1</CmdRef><Cmd>Alert</Cmd> <TargetRef>./contacts/james_bond</TargetRef> <SourceRef>./dev-contacts</SourceRef> <Data>200</Data> <!--Statuscode for OK--> 200代表正常 把认证对上,对方请求的值 <Item> <Data><Anchor xmlns='syncml:metinf'><Next>276</Next></Anchor></Data> </Item> </Status> <Status> 回复Put <MsgRef>1</MsgRef><CmdRef>2</CmdRef><Cmd>Put</Cmd> <SourceRef> devinf10</SourceRef> <Data>200</Data> <!--Statuscode for OK--> </Status> 返回值,请求对方 <Results> <MsgRef>1</MsgRef><CmdRef>3</CmdRef> <Meta><Type xmlns='syncml:metinf'>application/xml</Type></Meta> 固定格式 <Item> <Source><LocURI>devinf10</LocURI></Source> 固定格式 <Data> 相当于数据描述 <DevInf xmlns='syncml:devinf'> <Man>Small Factory, Ltd.</Man> <Mod>Tiny Server</Mod> <OEM>Tiny Shop</OEM> <DevId>485749KR</DevId> <DevTyp>Server</DevTyp> <DataStore> <SourceRef>./contacts</SourceRef> <DisplayName>Addressbook</DisplayName> <Rx-Pref> <CTType>text/x-vcard </CTType> <VerCT>2.1</VerCT> </Rx-Pref> <Rx> <CTType>text/vcard </CTType> <VerCT>3.0</VerCT> </Rx> <Tx-Pref> <CTType>text/x-vcard</CTType> <VerCT>2.1</VerCT> </Tx-Pref> <Tx> <CTType>text/vcard</CTType> <VerCT>3.0</VerCT> </Tx> 存储能力 <DSMem> <MaxMem>132650</MaxMem> <MaxID>1250</MaxID> <FreeMem>122430</FreeMem> <FreeID>1122</FreeID> </DSMem> </DataStore> <CTCap> <CTType>text/x-vcard</CTType> <PropName>BEGIN</PropName> <ValEnum>VCARD</ValEnum> <PropName>END</PropName> <ValEnum>VCARD</ValEnum> <PropName>VERSION</PropName> <ValEnum>2.1</ValEnum> <PropName>N</PropName> <PropName>TEL</PropName> <ParamName>VOICE</ParamName> <ParamName>CELL</ParamName> <CTType>text/vcard</CTType> <PropName>BEGIN</PropName> <ValEnum>VCARD</ValEnum> <PropName>END</PropName> <ValEnum>VCARD</ValEnum> <PropName>VERSION</PropName> <ValEnum>3.0</ValEnum> <PropName>N</PropName> <PropName>TEL</PropName> <ParamName>VOICE</ParamName> <ParamName>FAX</ParamName> <ParamName>CELL</ParamName> <CTType>text/vcard</CTType> <PropName>BEGIN</PropName> <ValEnum>VCARD</ValEnum> <PropName>END</PropName> <ValEnum>VCARD</ValEnum> <PropName>VERSION</PropName> <ValEnum>3.0</ValEnum> <PropName>N</PropName> <PropName>TEL</PropName> <ParamName>VOICE</ParamName> <ParamName>FAX</ParamName> <ParamName>CELL</ParamName> </CTCap> <SyncCap> <SyncType>01</SyncType> <SyncType>02</SyncType> <SyncType>07</SyncType> </SyncCap> </DevInf> </Data> </Item> </Results> 进行双向传输,唤醒对方 <Alert> <CmdID>1</CmdID> <Data>201</Data> <!-- 201 = TWO_WAY_ALERT --> <Item> <Target><LocURI>./dev-contacts</LocURI></Target> <Source><LocURI>./contacts/james_bond</LocURI></Source> <Meta> 发送认证 <Anchor xmlns='syncml:metinf'> <Last>200005021T081812Z </Last> <Next>200005022T093223Z </Next> </Anchor> </Meta> </Item> </Alert> <Final/> </SyncBody> </SyncML> 3.3.5.3客户端提交数据 <SyncML> <SyncHdr> <VerDTD>1.0</VerDTD> <VerProto>SyncML/1.0</VerProto> <SessionID>1</SessionID> <MsgID>2</MsgID> <Target><LocURI>http://www.syncml.org/sync-server</LocURI></Target> <Source><LocURI>IMEI:493005/10/059280/0</LocURI></Source> </SyncHdr> <SyncBody> 回复服务器的请求 <Status> <MsgRef>1</MsgRef><CmdRef>0</CmdRef><Cmd>SyncHdr</Cmd> <TargetRef>IMEI:493005/10/059280/0</TargetRef> <SourceRef> http://www.syncml.org/sync-server </SourceRef> <Data>212</Data> <!--Statuscode for OK, authenticated for session--> </Status> 回复服务器的请求 <Status> <MsgRef>1</MsgRef><CmdRef>1</CmdRef><Cmd>Alert</Cmd> <TargetRef>./dev-contacts</TargetRef> <SourceRef>./contacts/james_bond</SourceRef> <Data>200</Data> <!--Statuscode for Success--> <Item> <Data> Anchor回复对方请求的<next>值 <Anchor xmlns='syncml:metinf'><Next>200005022T093223Z </Next></Anchor> </Data> </Item> </Status> <Sync> <CmdID>1</CmdID> <Target><LocURI>./contacts/james_bond</LocURI></Target> <Source><LocURI>./dev-contacts</LocURI></Source> <Meta> 存储能力 <DSMem xmlns='syncml:devinf'> <FreeMem>8100</FreeMem> <!--Free memory (bytes) in Calendar database on a device --> <FreeId>81</FreeId> <!--Number of free records in Calendar database--> </DSMem> </Meta> <Replace> <CmdID>2</CmdID> <Meta><Type xmlns='syncml:metinf'>text/x-vcard</Type></Meta> <Item> <Source><LocURI>1012</LocURI></Source> 数据项地址 <Data><!--The vCard data would be placed here.--></Data> </Item> </Replace> </Sync> <Final/> </SyncBody> </SyncML> 3.3.5.4服务器端提交数据 <SyncML> <SyncHdr> <VerDTD>1.0</VerDTD> <VerProto>SyncML/1.0</VerProto> <SessionID>1</SessionID> <MsgID>2</MsgID> <Target><LocURI>IMEI:493005/10/059280/0</LocURI></Target> <Source><LocURI>http://www.syncml.org/sync-server</LocURI></Source> </SyncHdr> <SyncBody> 回复客户请求 <Status> <MsgRef>2</MsgRef><CmdRef>0</CmdRef><Cmd>SyncHdr</Cmd> <TargetRef>http://www.syncml.org/sync-server</TargetRef> <SourceRef>IMEI:493005/10/059280/0</SourceRef> <Data>200</Data> </Status> 回复Sync请求 <Status><!--This is a status for the client modifications to the server.--> <MsgRef>2</MsgRef><CmdRef>1</CmdRef><Cmd>Sync</Cmd> <TargetRef>./contacts/james_bond</TargetRef> <SourceRef>./dev-contacts</SourceRef> <Data>200</Data> <!--Statuscode for Success--> </Status> 回复Replace <Status> <MsgRef>2</MsgRef><CmdRef>2</CmdRef><Cmd>Replace</Cmd> <SourceRef>1012</SourceRef> <Data>200</Data> <!--Statuscode for Success--> </Status> 发出同步请求 <Sync> <CmdID>1</CmdID> <Target><LocURI>./dev-contacts</LocURI></Target> <Source><LocURI>./contacts/james_bond</LocURI></Source> <Replace> <CmdID>2</CmdID> <Meta><Type xmlns='syncml:metinf'>text/x-vcard</type></Meta> <Item> <Target><LocURI>1023</LocURI></Target> <Data><!--The vCard data would be placed here.--></Data> </Item> </Replace> <Add> <CmdID>3</CmdID> <Meta><Type xmlns='syncml:metinf'>text/x-vcard</type></Meta> <Item> <Source><LocURI>10536681</LocURI></Source> <Data><!--The vCard data would be placed here.--></Data> </Item> </Add> </Sync> <Final/> </SyncBody> </SyncML> 3.3.5.5客户端显示数据更改情况 <SyncML> <SyncHdr> <VerDTD>1.0</VerDTD> <VerProto>SyncML/1.0</VerProto> <SessionID>1</SessionID> <MsgID>3</MsgID> <Target><LocURI>http://www.syncml.org/sync-server</LocURI></Target> <Source><LocURI>IMEI:493005/10/059280/0</LocURI></Source> </SyncHdr> <SyncBody> 回复同步请求 <Status> <MsgRef>2</MsgRef><CmdRef>0</CmdRef><Cmd>SyncHdr</Cmd> <TargetRef>IMEI:493005/10/059280/0</TargetRef> <SourceRef> http://www.syncml.org/sync-server </SourceRef> <Data>200</Data> </Status> <Status> <MsgRef>2</MsgRef><CmdRef>1</CmdRef><Cmd>Sync</Cmd> <TargetRef>./dev-contacts</TargetRef> <SourceRef>./contacts/james_bond</SourceRef> <Data>200</Data> </Status> <Status> <MsgRef>2</MsgRef><CmdRef>2</CmdRef><Cmd>Replace</Cmd> <TargetRef>1023</TargetRef> <Data>200</Data> </Status> <Status> <MsgRef>2</MsgRef><CmdRef>3</CmdRef><Cmd>Add</Cmd> <SourceRef>10536681</SourceRef> <Data>200</Data> </Status> <Map>服务器和客户端的数据保持同步 <CmdID>1</CmdID> <Target><LocURI>./contacts/james_bond</LocURI></Target> <Source><LocURI>./dev-contacts</LocURI></Source> <MapItem> 10536681和1024指的是同一个数据 <Target><LocURI>10536681</LocURI></Target> <Source><LocURI>1024</LocURI></Source> </MapItem> </Map> <Final/> </SyncBody> </SyncML> 3.3.5.6服务器端确认更改 <SyncML> <SyncHdr> <VerDTD>1.0</VerDTD> <VerProto>SyncML/1.0</VerProto> <SessionID>1</SessionID> <MsgID>3</MsgID> <Target><LocURI>IMEI:493005/10/059280/0</LocURI></Target> <Source><LocURI>http://www.syncml.org/sync-server</LocURI></Source> </SyncHdr> <SyncBody> <Status> <MsgRef>3</MsgRef><CmdRef>0</CmdRef><Cmd>SyncHdr</Cmd> <TargetRef>http://www.syncml.org/sync-server</TargetRef> <SourceRef>IMEI:493005/10/059280/0</SourceRef> <Data>200</Data> </Status> 证实数据已经做了更改 <Status> <MsgRef>3</MsgRef><CmdRef>1</CmdRef><Cmd>Map</Cmd> <TargetRef>./contacts/james_bond </TargetRef> <SourceRef>./dev-contacts</SourceRef> <Data>200</Data> </Status> <Final/> </SyncBody> </SyncML> 4 SyncML表示协议 SyncML表示协议没有指定数据同步协议、同步引擎。而是指定了一些同步框架、格式使之适应不同的数据同步模型。SyncML指定了很多同步操作的结果。 定义了一种格式 注册为 MIME(多用途网际邮件扩充协议)媒体格式 定义了独立的同步传输协议 可以适合于多种同步传输方式的需要 与后台数据存储无关 与同步对象类型分离 4.1 SyncML 命令 4.1.1 请求的命令 Add:允许发送者将数据元素加入到接收者可以识别的同步数据中去,该命令必须在Sync命令中指定。 Alert:允许发送者通知接收者,通知可以作为应用程序和应用程序之间消息或者是接收用户接口的显示消息扩展。 Atomic:允许发送者指明一个命令集合可在带有语义或者没有任何语义的执行。 Copy:允许发送者复制可被接受者接收的数据。 Delete:允许发送者删除可被接受者接收的数据。Delete命令可以包含一个请求魏实现数据存档,删除可以是回收删除或者实际删除。 Exec:发送者可以要求接收者调用一个命名的、可执行的程序。 Get:发送者可以从接收者那里申请数据元素,这个命令不能被Sync命令指定。 Map:发送者可以接收者更新标识符在两个数据集合之间。 Put:允许发送者发送数据给接收者,这个命令不能被Sync命令指定。 Release:允许发送者对接收者可以接受的数据元素进行替换,这个命令不能被Sync命令指定。 Search:允许发送者进行数据元素的查询。 Sequence:允许发送者指定一系列按顺序执行。 Sync:允许发送者指定包含的命令作为同步两个数据集合的部分。 4.1.2 应答的命令 Status:当处理前一个请求发生错误的时候,指明一个操作的完成状态。 Results:用来返回Get或者Search命令的数据结果。 4.2 SyncML数据格式 SyncMl不但提供了通用的指令集合,还指明了一个小的通用的数据格式。数据格式提供了普通的为交换访问信息的媒体集合。例如通讯录、日历和消息。这三种数据格式是为了这个规范强制的,另外对于这些一般格式,SyncML允许鉴定其他的登记格式。SyncML利用MiME内容类型框架来鉴别数据格式。 4.3 使用XML SyncML消息是使用一种标记语言,而SynML表示协议其实是一个XML应用。SyncML DTD定义了用来表示SyncML消息的XML文档。SyncML大量的使用了XML的名空间,名空间必须在第一个元素类型声明。在SyncML DTD中的元素类型被定义在一个URI为“http://www.syncml.org/docs/syncml_represent_v10_20001207.dtd或者URN为syncml:syncml。SyncML DTD也可以被ISO 9070标准公用标示符-//SYNCML//DTD SyncML 1.0//EN识别。任何XML 的标准属性可以被用在SyncML文档中。 4.4使用 MIME 互联网标准提供了一个工业界广泛接受的机制来鉴别不同的内容种类。SyncML消息用MiME媒体类型来鉴别,SyncML消息的媒体类型被登记在生产厂家列表中。目前有两个MIME内容可以用在SyncML消息中。applicattion/vnd.syncml+xml的MIME内容类型鉴别了SyncML消息基于文本的XML表达。applicattion/vnd.syncml+wbxml的MIME内容类型鉴别了SyncML消息基于文本的WBXML二进制表达。 4.5 SyncML标记语言描述 4.5.1 一般使用元素 Archive、Chal、Cmd、CmdID、CmdRef、Cred、Final、Lang、LocURI、MsgID、MsgRef、NoResp、NoResult、RespURI、SessionID、SftDel、Source、SourceRef、Target、TargetRef、VerDTD、VerProto。 4.5.2 消息容器元素 SyncML、SyncHdr、SyncBody。 4.5.3 数据描述元素 Data、Item、Meta。 4.5.4 协议管理元素 Status。 4.5.5 协议命令元素 Add、Alert、Atomic、Copy、Delete、Exec、Get、Map、MapItem、Put、Replace、Result、Search、Sequence、Sync。 详细内容请查阅相关文档。 5 SyncML 参考工具包 工具包在XML语言和SyncML之间起到桥梁的作用 5.1使用 SyncML 工具包 一个缓冲区,存储SyncML编码可以选择如下中一种 ... 可以只使用一个工作空间 可以为一个应用程序分配一个工作空间 把 in 和 out 分成两个工作空间 5.2 使用SyncML工具包的工作空间 当同步开始,工作空间被创建: instanceOptions.encoding = SML_WBXML; instanceOptions.workspaceName ="MyWorkspace"; instanceOptions.workspaceSize =20000; callbacks.addCmdFunc = &handleAddCmdFunc; ...rc = smlInitInstance(callbacks, instanceOptions, &instanceID); 5.3 使用SyncML工具包解析器 体积小而且经过了优化处理(代替 DOM XML 解析器)支持以下格式: XML WBXML 回调函数将把解析后的信息送到应用程序,开始解析SyncML : smlProcessData(instanceID, // pass the instance SML_ALL_COMMANDS, // parse entire Msg pUserData); // a void ptr 5.4 使用工具包 编码器 需要编码的信息要经过Toolkit. pAddStruct->elementType = SML_PE_ADD; pAddStruct->cmdID = ... ; pAddStruct->itemList = ... ; pAddStruct->cred = ... ; smlAddCmd(instanceID, pAddStruct); 5.5 内容与通信 5.5.1 整合负载 解析、编码嵌入式数据格式 vCard vCalendar .... 数据库接口 Lotus Domino Outlook DB2 ... 5.5.2 发布同步信息 传输绑定 HTTP OBEX (Infrared) WSP Floppy Disk 相关资源 下面的链接是SyncML标准的网站 SyncML站点 作者 作者是蓝点软件公司北京研发中心工程师,对该方面感兴趣的读者可以和作者联系。 邮件地址:kevin@bj.bluepoint.com.cn SyncML协议SyncML协议SyncML Initiative 由 Ericsson, IBM, Lotus, Motorola, Nokia, Palm Inc., Psion, Starfish Software 初创。 SyncML Initiative 的目的在于与终端用户、设备开发商、数据提供商、基础构件开发商、应用软件开发商及服务提供商协同工作,发行 SyncML,以真正实现使用任何终端设备均可随时随地访问任何网络数据。 SyncML协议文档 SyncML的典型应用是移动设备和网络服务之间的数据同步。除此之外,SyncML还可用于对等的数据同步,如两台PC之间。SyncML的同步过程是由同步双方相互发送一系列消息来完成,消息的格式都在SyncML表示协议中做了具体定义。 SyncML的消息都是以XML格式的文档定义的,而XML是文本文档标记的工业标准,这必将极大地促进SyncML的推广和普及。 有了SyncML,网络数据可以通过多种设备同步化,用户可以使用不同的设备(包括掌上电脑、移动电话、汽车计算机、台式机等)访问和操作同一网络数据。此外,用户的个人信息(如电子邮件、通讯录等)能够在用户的不同设备上同时得到更新,并保持一致。比如,用户在掌上电脑上阅读了一封新收到的邮件,那么在他的台式机中,也会自动地将这封邮件显示为已读邮件。有了SyncML,用户还可以在他的移动设备上更多地使用应用软件和信息,如果对这些软件和信息有所更新,可以随时将这些更新信息同步到办公室设备或网络。
SyncML的总体框架如后面的图中所示,其主要组成部分的功能如下: App A:是位于服务器端的应用,负责为其他应用提供数据同步服务。 App B:是位于客户端的应用,请求并接受App A所提供的数据同步服务。 Sync Engine:位于服务器端,负责在同步过程中分析数据集中所做的改动,检测和解决冲突。客户端也可以有部分类似的功能。 Sync Server Agent和Sync Client Agent:调用在SyncML同步协议中提供的接口(SyncML I/F)与对方通信。 SyncML I/F:即SyncML Interface,是SyncML同步协议中提供的接口,它建立在各种底层通信协议之上,与应用无关,由SyncML行动组织定义和发行。 SyncML客户机通常是移动电话、PDA、PC等,而SyncML服务器可以是专门的服务器或PC。一般情况下是由客户机首先把自己的更改信息发送给服务器,并等待服务器的应答,而服务器在接收到更改信息后要进行同步分析以检测和解决冲突,然后把处理结果和更改要求返回给客户机。但也有些情况是由服务器首先开始同步过程。
在SyncML同步协议中定义了七种同步类型: ●双向同步 是最常见也最具有代表性的一种同步,其他同步过程都和它有很多相似之处。双向同步总是由客户机首先发起,然后客户端和服务器互换更新信息。同步过程如下:同步初始化;客户端准备要发送的数据;客户端发送自己的更新信息;服务器接收并进行分析处理;服务器返回处理的状态信息和自己的更新信息;客户端接收更新信息并对自己的数据库进行更新;客户端把更新的状态信息发送给服务器,其中包含插入记录的ID映射信息;服务器对客户端发送的映射信息做应答;客户端收到服务器的应答后,把同步结果通知用户。 ●慢同步 是双向同步的一种。在一般的双向同步中,客户机只是把自己在上次同步过程中所做的修改发送给服务器,而在慢同步中,客户机则把自己所有的数据都发给服务器,服务器逐一比较接收到的数据和自己的数据,以确定客户端哪些数据需要更新,然后把这些更新信息发送给客户端。需要慢同步的情况一般有:设备之间第一次同步;修改日志丢失;同步双方的同步标志不匹配。由于产生慢同步的原因很多,所以客户机和服务器双方都有可能发起慢同步。 ●客户端单向同步 只由客户机向服务器发送上次同步之后自己更新的信息,而服务器不把自己的更新信息发送给客户端。 ●客户端刷新同步 属于客户端单向同步的一种。客户机把自己所有的数据都发给服务器,并刷新服务器上的数据。 ●服务器单向同步 客户机从服务器那里得到上次同步之后服务器所有的更新信息,但不向服务器发送自己的更新信息。 ●服务器刷新同步 属于服务器单向同步的一种。服务器把所有的数据都发给客户端,并刷新客户端的数据。 ●服务器发起的同步 前面六种同步方式都是由客户机主动发起的同步过程,而这种同步方式是由服务器首先通知客户端,让其开始某种类型的同步。 资料来源 November 23 说说好久好久没有来这里看看了,懒的写,
好久没有出去逛逛了,也是懒的跑,
........................
好久没有给她打电话了,不知道为什么,但绝对不是懒,也不是不想
说不清,也就不说了...............
或许也是不想让别人知道我的心情
习惯了孤独,习惯了一个人的日子.......................
或许..........,我想还是不要乱加猜测,算了,不说了
习惯了孤独,习惯了一个人的日子
其实也蛮好 July 19 其实我一直很喜欢写些东西的..........以前很喜欢写一些东西,可是好久好久了,都没有动过这个念头了
说不清是为什么,因为工作,因为心情,
都有吧...............
其实很想写一些东西给一些人,可是肯定,肯定都不会被看到.........
而又因为肯定不会被看到,是不是就可以随便的写写,反正怎么说也不会被看到.........
被人不信任的感觉很不好,我想应该都有这种感觉
于是我想,一段不被信任的感情是否还有继续坚持的必要........
于是我想,我为什么没有放弃........
于是我想,爱情到底是什么东西........
于是我甚至去读哲学........
于是反正我是乱七八糟...........
于是我还是什么都搞不懂..........
于是我就在这里胡乱的写一些东西.........
于是也仅此而已......
|
|
||||||||||||
|
|