Android-приложение обрабатывает запросы на запись по ненадежной сети

Я разрабатываю приложение для Android для сбора данных, которое, как ожидается, будет использоваться на открытых площадках с пятнистым покрытием сети, поэтому важна надежность обмена сообщениями между клиентами. Если пользователь пытается что-то отправить, и запрос не выполняется или сеть отсутствует, приложение должно запомнить это и повторить попытку позже, либо по требованию, либо после восстановления соединения.

Мы рассматриваем Firebase для нашей модели данных, но также хотим оценить более традиционное решение для сервера / БД /API. Одним из больших преимуществ Firebase является их "автономная" поддержка через клиентский SDK:

Ваше приложение Firebase будет реагировать независимо от задержки в сети или подключения к Интернету. Все записи в базу данных Firebase будут запускать локальные события немедленно, прежде чем любые данные будут записаны на сервер. После восстановления соединения клиент получит все пропущенные изменения, синхронизируя его с текущим состоянием сервера.

Получить это бесплатно - это здорово, если мы пойдем с Firebase. В качестве альтернативы, что даст мне аналогичную возможность на стороне клиента для поддержки типичного RESTful API? Желательно какая-то библиотека, которая бы обрабатывала для меня состояние, а не отслеживала отдельные попытки.

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

1 ответ

Если вы рассматриваете приложение hybird, вы можете использовать PouchDB в WebView (оно поддерживает Cordova и Android с SQL Lite и может быть повторно использовано для iOS таким образом). Его можно использовать только на локальной стороне, вместо того, чтобы использовать его возможности синхронизации, которые просты и эффективны, но требуют предоставления клиентам прямого доступа к базе данных. Хотя вы можете настроить права доступа к R/W и нескольких пользователей на БД, и каждый БД может быть для каждого клиента / проекта, на самом деле именно так CouchDB предназначен для использования, что делает возможность масштабирования очень простой.

Он прост в использовании и запутывает основную технологию браузера, которая требуется и зависит от браузера для хранения данных. Так что вам не нужно беспокоиться о том, какой браузер поддерживает какую технологию, например, SQL или localalstorage и т. Д. Подобно Firebase, он может быть более гибким для вашей ситуации.

Вместо простого.sync() вы можете перейти от PouchDB в браузере к серверу CouchDB, вы можете использовать традиционный REST, когда становится доступным соединение для передачи данных. Слой данных для просмотра будет PouchDB, и тогда вы сможете отдельно управлять синхронизацией с сервером и отслеживать ответы, чтобы убедиться, что они обновлены. Однако было бы намного проще использовать функцию синхронизации, если она могла бы соответствовать вашим требованиям.

http://pouchdb.com/learn.html

Другие вопросы по тегам