【问题标题】:What are the difference between SyncML and CalDAV?SyncML 和 CalDAV 有什么区别?
【发布时间】:2012-01-11 23:57:13
【问题描述】:

我想知道 SyncML 和 CalDAV 在功能、优缺点方面有什么区别。

我正在尝试确定使用哪种技术来同步网络应用和移动设备之间的事件/日历。我需要处理冲突和双向同步。

乍一看,CalDAV 似乎最适合我的需求,但我不确定是否知道可能的缺点。 SyncML 是一个标准,但我在 Oracle 的博客上读过一些帖子说 CalDAV 更好......

我知道 Google 支持这两者,但也提供 ActiveSync (Exchange),这是一种 Microsoft 技术,作为他们的主要解决方案。我对这种方式不感兴趣。

干杯, 威廉

【问题讨论】:

    标签: web-applications mobile synchronization caldav syncml


    【解决方案1】:

    好吧,我可以自己回答。

    CalDAV

    CalDAVWebDAV 之上的协议,它是HTTP 协议的扩展。 CalDAV 在RFC 4791 中有描述。它使用iCalendar 作为数据格式。有很多实现。

    关于冲突 CalDAV 使用409 Conflicts 状态代码 (HTTP 1.1)。客户端必须处理此错误代码,据我所知,iCal(Mac 客户端)只是恢复本地更改。 然后,很容易在服务器中定义规则来知道如果有冲突该怎么办,如果你不能解决其中一个,那么我们只需要发送一个409状态码。

    作为一个标准,CalDAV专门用于管理日历数据,并且有很多客户端。

    很遗憾,Android 没有提供任何原生解决方案来使用此协议,实际上除了 Exchange ActiveSync(由 Google 使用)之外,它没有提供任何其他解决方案。但 Android 市场上有大量 CalDAV 客户端。

    iOS 原生支持 CalDAV。

    SyncML

    同步 Mrkup 语言是一种独立于平台的同步语言,用于管理数据,由诺基亚、IBM 等大公司创建……它是一个开放标准。它使用 HTTP 作为传输和 XML 来描述信息。有多种服务器实现,例如Funambol 是众所周知的。

    SyncML 描述了七个同步:

    • 双向同步:服务器和客户端共享有关更改的信息,但客户端是第一个发送更改的;
    • 慢速同步:客户端发送所有数据。服务器确定其数据和客户端数据之间的增量,然后服务器发送此增量。常用于第一次同步;
    • 单向同步,仅限客户端:客户端将更改发送到服务器;
    • 从客户端刷新同步:客户端发送所有数据,服务器发送所有数据;
    • 单向同步,仅限服务器:服务器将更改发送到客户端;
    • 从服务器刷新同步:服务器发送所有数据,客户端将其数据替换为服务器数据;
    • 服务器警报同步:服务器要求客户端开始给定同步。

    SyncML 使用一组预定义规则处理服务器上的冲突,例如 Updates mades on the Client always winUpdates mades on the Client always win、...

    SyncML 专门用于同步数据,但 iOSAndroid 都不支持。诺基亚或三星智能手机似乎支持此协议,以及 Windows Phone 6。

    那么?

    Microsoft Exchange ActiveSync 是支持几乎所有智能手机以及重型客户端的最佳选择。但是,它不是一个开放的标准,它是商业的,出于这些原因我没有描述它,记住它。

    关于移动操作系统:

    • Android 不支持 ActiveSync 以外的任何东西,但存在一些好的 CalDAV 客户端;
    • iOS 支持 CalDAV 但不支持 SyncML,据我所知,日历数据没有 SyncML 客户端(Funambol 提供了联系人客户端);
    • Windows Phone 7 不支持 ActiveSync 以外的任何其他功能;
    • RIM (BlackBerry) 似乎不支持 CalDAV,但有 SyncML 客户端;
    • 我不确定其他操作系统(如 Bada,...)。

    在法国,iOS 占移动市场的 60%Android 占 30%

    最好的解决方案(至少对我而言)是首先实现具有一组自定义规则的 CalDAV 服务器来处理冲突,然后实现 SyncML 服务器来覆盖其余市场。

    【讨论】:

    • 我不明白您如何处理与 CalDAV 的冲突。从我所看到的来看,从来没有任何409 Conflicts。相反,客户端(iOS / DAVDroid)在推送(PUT)之前同步(PROPRIND/REPORT)。因此,如果服务器上有更新的日历对象,它会覆盖本地更改。在这种情况下,客户端永远不会通知服务器本地更改!所以像事件参与这样的变化可能会被完全忽略,并且在服务器端没有办法处理它......
    【解决方案2】:

    几个问题可以更好地解决您的问题 -

    1. 您是在控制设备客户端,还是必须依赖已部署设备上的本机客户端?

    2. 您可以控制同步服务器吗?

    3. 除了日历事件之​​外,您是否预计需要同步其他类型的数据?注意:就本问题而言,诸如日历附件(例如联系人或文件)之类的内容算作“其他类型的数据”。

    4. 您需要支持什么级别的复杂性?定期事件、定期事件例外、共享或协作日历、具有多个单独日历(例如,设备日历、Outlook 日历、Gmail 日历等)的用户

    5. 是否有您需要同步的特定桌面应用程序(例如 Outlook/Exchange),或者这完全是云 设备?

    【讨论】:

    • 1.本地客户 2. 是的,我必须写它(实际上,自从我问这个问题以来,我就写过它) 3. 日历和联系人数据 4. 没有那样的 5. 不,但如果可能的话,没关系,我曾经提供顺便说一句,日历作为 Web 应用程序,我想我自己回答了。感谢您的关注:)
    【解决方案3】:

    android 确实支持 syncml - 检查 funamold 同步应用程序
    android-client_funambol(查看那里的论坛,它非常活跃,并尝试高级功能的快照)

    【讨论】:

    • 原生支持
    猜你喜欢
    • 1970-01-01
    • 2015-07-14
    • 2010-10-02
    • 2011-12-12
    • 2010-09-16
    • 2012-03-14
    • 2012-02-06
    • 2011-02-25
    • 2011-11-22
    相关资源
    最近更新 更多