Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Offline / Online Data Synchronization Design (Javascript) [closed]

I'm currently in the process of writing an offline webapp using all the html5 goodies for offline support. However I'm starting now to think about writing the sync module that will ensure that any offline data gets sent to the server and server data back to the client. Now I'm sure this has been done before, I mean its a pretty classic design issue that affects mobile devices and a plethora of other things. So I'm wondering can anyone point me to some good design resources for this kind of thing?

Now I really do not need to be too sophisticated with this, I mean I'm not handling multiple users accessing the same data and I'm happy not to merge conflicts (just take the latest) but still I would like a design that will allow me those options in the future.

Also, are there any open source projects implementing this type of thing? I'm not above ripping off someone else's code (if license allows) and I'm happy to port.

like image 287
gatapia Avatar asked Jul 19 '10 21:07

gatapia


People also ask

What is offline synchronization?

Offline data sync is an SDK feature of Azure Mobile Apps. Data is stored in a local store. When your app is offline, you can still create, modify, and search the data. Data is synchronized with your Azure Mobile Apps service when your device is online.

What is offline synchronization in android?

Offline sync allows end users to interact with a mobile app—viewing, adding, or modifying data—even when there's no network connection. Changes are stored in a local database. Once the device is back online, these changes are synced with the remote backend.

What is data synchronization example?

Let's see a simple example of data synchronization: Suppose we have added a new popular ringtone to one of the servers of a mobile service provider, so here, data synchronization means that all the service provider servers get identical sets of ringtones.


2 Answers

I had a similar problem. I decided to use a purely JSON in and out approach. The solution I'm taking on form submission is:

  1. catch the form submit event
  2. check whether or not the user is online
  3. if user is online then submit the form as normal form POST
  4. if user is offline then stringify a JSON request and store it locally (I decided to use Web SQL Database). Queue table is simply Uri and Payload.

Then I have global event hooks for the online / offline events. When the user comes back online, it checks the queue, and if the queue has items in it, it then sends them through as JSON POST requests.

If you are primarily interested in getting JSON data and caching it for offline usage, then take a look at jquery.offline.

The challenge with synchronizing in both direction is that you need to update the local cached lists with any CRUD work that you have queued.

I'd like to find a more generic way to do this.

like image 56
Rebecca Avatar answered Oct 21 '22 09:10

Rebecca


My plan for a similar design (not yet tried) is to use something like PouchDB to store the data locally and then sync it with a remote couch instance.

like image 30
kybernetikos Avatar answered Oct 21 '22 10:10

kybernetikos