В чем разница между SyncML и CalDAV?
Интересно, в чем разница между SyncML и CalDAV с точки зрения возможностей, плюсов и минусов.
Я пытаюсь определить, какую технологию использовать для синхронизации событий / календарей между веб-приложением и мобильными устройствами. Мне нужно обрабатывать конфликты и двунаправленную синхронизацию.
На первый взгляд CalDAV кажется наиболее подходящим для моих нужд, но я не уверен, что знаю возможные недостатки. SyncML - это стандарт, но я прочитал некоторые посты в блоге Oracle, в которых говорится, что CalDAV лучше...
Я знаю, что Google поддерживает оба, но также предоставляет ActiveSync (Exchange), который является технологией Microsoft в качестве основного решения. Меня это не интересует.
Ура, Уильям
3 ответа
Ну, я могу ответить сам.
CalDAV
CalDAV - это протокол поверх WebDAV, который является расширением протокола HTTP. CalDAV описан в RFC 4791. Он использует iCalendar в качестве формата данных. Есть много реализаций.
О конфликтах CalDAV использует 409 Conflicts
код состояния (HTTP 1.1). Клиенту приходится иметь дело с этим кодом ошибки, насколько я знаю, iCal (клиент Mac) просто отменяет локальные изменения. Затем довольно просто определить правила на сервере, чтобы знать, что делать, если есть конфликты, если вы не можете разрешить одно из них, тогда нам просто нужно отправить 409
код состояния.
Как стандарт, CalDAV предназначен для управления календарными данными, и есть много клиентов.
К сожалению, Android не предоставляет никакого собственного решения для использования этого протокола, на самом деле он не предоставляет ничего, кроме Exchange ActiveSync (используется Google). Но на Android Market есть множество клиентов CalDAV.
iOS имеет встроенную поддержку CalDAV.
SyncML
Синхронизация Mrkup Language - это независимый от платформы язык синхронизации для управления данными, созданный крупными компаниями, такими как Nokia, IBM, … Это открытый стандарт. Он использует HTTP в качестве транспорта и XML для описания информации. Существует множество реализаций серверов, например, хорошо известен Funambol.
SyncML описывает семь синхронизаций:
- Двусторонняя синхронизация: и сервер, и клиент делятся информацией об изменениях, но клиент первым отправляет изменения;
- Медленная синхронизация: клиент отправляет все свои данные. Сервер определяет дельту между своими данными и данными клиента, затем сервер отправляет эту дельту. Это часто используется при первой синхронизации;
- Односторонняя синхронизация, только клиент: клиент отправляет изменения на сервер;
- Обновить синхронизацию с клиента: клиент отправляет все свои данные, сервер отправляет все свои данные;
- Односторонняя синхронизация, только сервер: сервер отправляет изменения клиенту;
- Обновить синхронизацию с сервера: сервер отправляет все свои данные, клиент заменяет свои данные данными сервера;
- Сервер предупрежден о синхронизации: сервер просит клиента запустить заданную синхронизацию.
SyncML обрабатывает конфликты на сервере с набором предопределенных правил, таких как Updates mades on the Client always win
, Updates mades on the Client always win
…
SyncML предназначен для синхронизации данных, но ни iOS, ни Android не поддерживают его. Смартфоны Nokia или Samsung поддерживают этот протокол, а также 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, чтобы охватить весь остальной рынок.
Android поддерживает Syncml - проверьте приложение funambold sync
на https://android-client.forge.funambol.org/ ( проверьте форум там, он довольно активен и попробуйте снимки для расширенных возможностей)
Пара вопросов, чтобы лучше ответить на ваш запрос -
Вы управляете клиентами устройств или должны полагаться на собственные клиенты на уже развернутых устройствах?
Вы контролируете сервер синхронизации?
Ожидаете ли вы, что нужно синхронизировать другие типы данных, кроме событий календаря? Примечание: такие вещи, как вложения календаря (например, контакты или файлы), считаются "другими типами данных" для целей этого вопроса.
Какой уровень сложности вам нужно поддерживать? Периодические события, исключения для повторяющихся событий, общие или совместные календари, пользователи с несколькими отдельными календарями (например, календарь устройства, календарь Outlook, календарь Gmail и т. Д.)
Существуют ли определенные настольные приложения, с которыми нужно синхронизироваться (например, Outlook/Exchange), или это исключительно облачное <-> устройство?