Как работает SyncML-сервер

Что такое SyncML?
SyncML – это протокол синхронизации данных, основанный на языке разметки XML, разработанный консорциумом OMA (Open Mobile Alliance) для синхронизации данных мобильных устройств. Первая версия спецификации протокола была опубликована в декабре 2000 года, и в настоящий момент большинство телефонов используют версии 1.1 и 1.2. Широкую популярность протокола, и его поддержку большинством производителей телефонов и программного обеспечения, обеспечила открытость спецификации, а так же популярность существующего на тот момент набора базовых протоколов и языков (HTTP, XML, WBXML и др.). Протокол SyncML включает набор команд для авторизации пользователя, передачи информации о клиентском устройстве (какие возможности поддерживает телефон в плане синхронизации данных), собственно команды синхронизации (такие как добавление, замена, удаление), а так же некоторые служебные команды. Если совсем просто, SyncML – это соглашение о том, в каком формате клиент (телефон) должен обмениться данными с сервером. Все остальные технологии связанные с решением задачи синхронизации имеют широкое применение и, вероятно, вы с ними уже знакомы.

Транспортный уровень
Для обмена данными не существует каких-либо принципиальных ограничений: данные SyncML можно передавать по HTTP/HTTPS, OBEX (по Bluetooth или IrDA), SMTP, TCP/IP и т.д. Штатные SyncML-клиенты в телефонах обычно используют протокол HTTP через рабочее подключение к Интернету (WAP/GPRS/EDGE/WiFi/WiMAX). В этом плане, синхронизация использует те же средства, что и обычный WEB-браузер. В процессе синхронизации, для уменьшения объёма трафика, обычно, используется бинарное представление XML – WbXML.

Процесс синхронизации
Процесс синхронизации заключается в обмене командами и статусами их выполнения между клиентом и сервером. Команды объединяются в пакеты и передаются в формате SyncML. Когда клиент инициирует синхронизацию, он передаёт данные авторизации (имя и пароль), идентификатор устройства (IMEI), запросы синхронизации баз данных (на wap4b.ru это con/caltask/note) и некоторую служебную информацию. Если авторизация проходит успешно и клиент запрашивает синхронизацию существующих баз данных, то далее клиент передаёт все данные или только данные, изменившиеся с момента последней синхронизации. Различается несколько типов синхронизации, из числа которых, основными являются медленная и быстрая синхронизации. При быстрой синхронизации передаются только изменённые данные, при медленной – все синхронизируемые данные. Выбор типа синхронизации сервер осуществляет автоматически.

Медленная синхронизация используется при первом запуске, что вполне очевидно – клиент должен передать все данные на сервер и получить от сервера все имеющиеся у него данные, а так же, медленная синхронизация используется, если в предыдущий сеанс синхронизации произошла ошибка. При данном типе синхронизации сервер выполняет полное сравнение принятых данных с данными синхронизируемой базы. Правила сравнения зависят от типа данных и реализации логики сервера. Например, на сервере есть некоторый контакт, и похожий контакт поступил с телефона. Допустим, в контакте совпадают фамилия, имя и номер телефона, но есть различия в некоторых полях, тогда можно сделать вывод, что это тот же самый контакт. Данная ситуация называется конфликтом и имеет три варианта решения: используются данные клиента, используются данные сервера, данные объединяются и обновляются на сервере и клиенте. Сервер WAP4B позволяет установить для каждого устройства наиболее подходящую стратегию разрешения конфликтов.

Результатом «медленной» синхронизации являются идентичные данные на сервере и на клиенте, а так же сервер и клиент сформируют информацию для выполнения быстрой синхронизации в следующем сеансе. Что это за информация? В первую очередь – это состояния всех объектов (далее, применительно к контактам/визиткам или событиям календаря). Например, если на сервер поступила новая визитка, то она получит статус «новая» и таковой она будет являться для последующей синхронизации с другими устройствами. Соответственно, есть ещё состояния «обновлённый» и «удалённый». Сервер запоминает все состояния и даты их изменений, поскольку у пользователя может быть несколько устройств (а в данный момент он синхронизировал только одно). Клиент же, непосредственно среагирует на изменение состояния объёкта на сервере, т.е. если та же визитка удалена на сервере, то телефон так же её удалит её из своей базы. Ну и, пожалуй, самый важный момент, без которого будет невозможна быстрая синхронизация – это формирование локальных и глобальных идентификаторов, а так же связей между ними. Каждый объект клиента автоматически получает собственный локальный идентификатор, а объект на сервере – глобальный. Кроме того, сервер устанавливает взаимнооднозначное соответствие между всеми локальными и глобальными идентификаторами. Два типа идентификаторов нужно опять же по причине, что у пользователя может быть несколько устройств и для каждого устройства имеется свой локальный идентификатор объёкта. Это значит, что серверу не придётся в дальнейшем сравнивать каждый объект – достаточно знать локальный идентификатор.

Быстрая синхронизация происходит значительно проще и потребляет на порядок меньше трафика, поскольку передаются только изменённые данные. И клиент и сервер помнят дату последней синхронизации. Когда клиент инициирует синхронизацию, он сообщает серверу, что случилось с данными с момента последней синхронизации (вот здесь и вступают в работу состояния объектов в сочетании с локальными идентификаторами). Т.е. клиент сообщает, что некоторый объект с его локальным идентификатором был удалён, другой объект изменён, а третий добавлен и в каждом случае с указанием даты. Серверу остаётся сравнить состояния тех же самых объёктов: новые – добавляем, удалённые – удаляем, изменённые - изменяем. Затем сервер отправляет свои изменения, ведь его данные мог изменить пользователь в результате синхронизации с другим устройством или, например, через WEB-интерфейс.

Перейти к регистрации  Авторизоваться  Вернуться на главную
© wap4b.ru 2006-2012
Ошибка