Ответ 1
Мой план аналогичного дизайна (еще не опробован) заключается в использовании чего-то вроде PouchDB для локального хранения данных и последующей синхронизации с удаленным экземпляром кубка.
Сейчас я нахожусь в режиме автономного webapp, используя все html5 лакомства для автономной поддержки. Однако теперь я начинаю думать о написании модуля синхронизации, который обеспечит отправку любых автономных данных на сервер и данные сервера клиенту. Теперь я уверен, что это было сделано раньше, я имею в виду его довольно классическую проблему дизайна, которая затрагивает мобильные устройства и множество других вещей. Поэтому мне интересно, может ли кто-нибудь указать мне на некоторые хорошие ресурсы дизайна для такого рода вещей?
Теперь мне действительно не нужно быть слишком сложным с этим, я имею в виду, что я не обрабатываю несколько пользователей, получающих одни и те же данные, и я рад не объединять конфликты (просто беру последние), но все же я хотел бы, чтобы дизайн, который позволит мне эти варианты в будущем.
Кроме того, существуют ли проекты с открытым исходным кодом, реализующие этот тип вещей? Я не над копированием кода другого пользователя (если лицензия разрешает), и я рад порту.
Мой план аналогичного дизайна (еще не опробован) заключается в использовании чего-то вроде PouchDB для локального хранения данных и последующей синхронизации с удаленным экземпляром кубка.
У меня была аналогичная проблема. Я решил использовать чисто JSON in и out. Решение, которое я принимаю в форме:
Затем у меня есть глобальные крючки событий для онлайн-событий. Когда пользователь возвращается в сеть, он проверяет очередь, и если в очереди есть элементы, она отправляет их через запросы JSON POST.
Если вы в первую очередь заинтересованы в получении данных JSON и кешировании его для использования в автономном режиме, посмотрите jquery.offline.
Задача с синхронизацией в обоих направлениях состоит в том, что вам необходимо обновить локальные кешированные списки с любой работой CRUD, которую вы поставили в очередь.
Я хотел бы найти более общий способ сделать это.
Откажитесь от Derby, Node MVC-фреймворка, который обладает довольно приятными функциями синхронизации и разрешения конфликтов. http://derbyjs.com/
в нашей команде мы уже создали приложение в автономном/онлайн режиме.
мы используем следующие следующие библиотеки:
В режиме автономной работы мы кэшируем все файлы ресурсов и jst-шаблон для отображения содержимого на странице. backbonejs и backbonejs-localStorage помогает сделать приложение MVC на клиенте. это довольно здорово, вы должны попробовать. мы всегда используем localstorage для сохранения данных. когда мы создаем сообщение, например, объект модели и сохраняем его в localStorage, мы запускаем очереди для синхронизации (также у нас есть рабочий стол таймера для автоматического запуска процесса синхронизации). Для каждой модели у нас есть отдельный класс синхронизации, который должен запускаться триггером синхронизации очереди. если ваш navigator.onLine = > true, мы отправляем запросы на сервер с данными для обновления. если вы закроете браузер, в любом случае вы не потеряете свои данные, потому что у вас есть очереди в localStorage. в следующий раз клиент будет синхронизировать данные по первой загрузке с помощью navigator.onLine = > true.
Как использовать стойку в автономном режиме, вы можете проверить мой небольшой проект в github:
Удачи!
Я лично рекомендую вам написать обертку поверх индексированного интерфейса API, который проверяет, находитесь ли вы в сети/в автономном режиме.
Вам нужно будет расширить туннель, чтобы автоматически установить постоянный флаг, а также туннелировать синхронизацию этих документов с бэкэнд
Я столкнулся с той же проблемой и в итоге использовал XML файл для хранения и git для отслеживания изменений и фиксации их автоматически, как только будет доступно соединение. Синхронизация выполняется с помощью обычных команд git commit/push/pull в оболочке script и cronjob, начиная с script. Это также будет работать, если вы сохраните JSON в текстовом файле.
В настоящее время я работаю над подобным webapp. Я решил сделать такой рабочий процесс:
Если вы хотите использовать потенциально тяжелую инфраструктуру Ext JS/Sencha, у нее есть хороший API данных с автономной поддержкой (например, localStorage) и прокси-подход для записи через локальный сервер. Я использую Sencha Touch (для мобильных устройств).
Для отладки веб-хранилища проверьте Weinre.
DerbyJS, вероятно, лучшее решение. Однако Derby все еще находится в разработке, и автономная поддержка только в планировании и еще не реализована. В группе Google (http://groups.google.com/group/derbyjs/browse_thread/thread/7e7f4d6d005c219c) вы можете найти дополнительную информацию о том, что планируется в будущем.