Повышение эффективности связи клиента с сервером мобильных приложений и доступности данных в автономном режиме.

Мой вопрос о том, как хранить данные, которые когда-то были получены онлайн и все еще могут быть обработаны после того, как мобильное устройство отключилось и/или было перезапущено. Я использую AngularJS с Ionic (PhoneGap) для создания приложений. Но мой вопрос явно не касается этих технологий.

Лучшие практики, шаблоны или алгоритмы были бы очень полезны для меня или даже некоторые полезные статьи или ключевые слова.

1) Самая простая задача — сделать мое приложение более удобным для пользователя, сделав его функционал пригодным для использования не только в онлайн-режиме, но и в офлайн-режиме. В моем случае это означает, что я должен сделать последние извлеченные онлайн-данные доступными для последующего использования (когда устройство находится в автономном режиме, а также после перезапуска устройства!).

2) Немного сложнее снизить затраты на связь, только синхронизируя измененные данные на стороне сервера при повторном подключении устройства к Интернету.

3) Объекты также могут быть созданы на стороне клиента, когда устройство находится в автономном режиме, и они также должны быть синхронизированы с сервером. Потенциальные риски конфликтов отсутствуют, так как пользователи не совместно используют объекты с правами на запись.

4) Я использую push-сервисы Google и Apple для информирования устройств о новых версиях объектов, которые должны обновляться на стороне клиента. Так что голосование не нужно.

Технологии на стороне клиента: Javascript, AngularJS Framework, Ionic Framework, SQLite (WebSQL) или IndexedDB, PhoneGap (Cordova)

Серверные технологии: Java EE, JPA, MySQL

Формат данных и обмен данными: JSON через REST/http, сервисы push-уведомлений Google и Apple для обмена сообщениями между серверами и клиентами.


person user1498532    schedule 26.06.2015    source источник
comment
Это может быть «закрыто» как слишком широкое, но я сам «люблю» его, чтобы посмотреть, что могут предложить мудрые коллеги. Я как раз в этом месте для одного из моих приложений :)   -  person YvesLeBorg    schedule 26.06.2015


Ответы (1)


1) Храните необходимые данные в локальной базе данных SQLite и извлекайте их при запуске/возобновлении приложения.


2) В базе данных MySQL вам нужна таблица, которая создает новые записи при обновлении/изменении/создании контента. Вам нужно будет сохранить идентификатор и отметку времени (возможно, логическое значение, если содержимое было удалено).

На устройстве вы должны сделать запрос на сервер, чтобы отправить данные из этой таблицы и сравнить их с локально сохраненными данными. Если есть новый идентификатор или временная метка изменилась, сделайте новый запрос, чтобы получить обновленные данные.


3)Хранить созданные данные локально с отметкой, что они не синхронизируются с сервером. Когда устройство затем снова подключается к сети, проверьте наличие флагов несинхронизации и отправьте данные на сервер с идентификатором, чтобы узнать, с какого устройства они поступают и где их сохранить.


4) См. 2)

Вы можете создать Java-скрипт, который каждые x минут проверяет наличие обновленных записей и отправляет с ним автоматическое push-уведомление. Вам понадобятся 2 таблицы, одна с новейшими обновлениями, а другая с обновлениями, полученными устройством (только идентификаторы и временные метки, а не все данные).


Я надеюсь, что это было полезно, если мне придет в голову что-то новое, я обновлю этот ответ.

person Timo    schedule 26.06.2015