离线/在线数据同步devise(Javascript)

我目前正在编写一个离线的web应用程序使用所有的html5好东西离线支持。 不过,我现在开始考虑编写同步模块,以确保将任何脱机数据发送到服务器和服务器数据返回给客户端。 现在我确定这已经完成了,我的意思是它是一个非常经典的devise问题,影响到移动设备和其他许多事情。 所以我想知道有没有人可以指点我一些好的devise资源,这种事情?

现在我真的不需要太复杂,我的意思是我没有处理多个用户访问相同的数据,我很高兴不合并冲突(只是采取最新),但我仍然希望有一个devise,将请允许我将来使用这些选项。

另外,有没有开源项目实现这种types的东西? 我不是在撕掉别人的代码(如果许可证允许的话),我很乐意移植。

我对类似devise(还没有尝试过)的计划是使用像PouchDB这样的方式在本地存储数据,然后将其与远程沙发实例同步。

我有一个类似的问题。 我决定使用纯粹的JSON进出方法。 我正在表单提交的解决scheme是:

  1. 抓住表单提交事件
  2. 检查用户是否在线
  3. 如果用户在线,则以正常的POSTforms提交表单
  4. 如果用户处于脱机状态,则将JSON请求string化并将其存储在本地(我决定使用Web SQL数据库)。 队列表就是Uri和Payload。

然后我有全球事件挂钩在线/离线事件。 当用户重新联机时,它将检查队列,如果队列中有项目,则将其作为JSON POST请求发送。

如果您主要想获取 JSON数据并将其caching为脱机使用,请查看jquery.offline 。

双向同步面临的挑战是,您需要使用任何已排队的CRUD工作来更新本地caching列表。

我想find一个更通用的方法来做到这一点。

查看Derby,一个Node MVC框架,它有一些非常好的同步和冲突解决function。 http://derbyjs.com/

在我们的团队中,我们已经开发了离线/在线模式的应用程序。

我们正在使用下面的库:

  • 机架离线
  • jQuery的
  • backbonejs
  • backbonejs,localStorage的
  • backbonejs队列
  • jammit

使用rack-offline我们正在caching所有资源文件和jst模板,以便在页面上呈现内容。 backbonejs和backbonejs-localStorage有助于在客户端上创buildMVC应用程序。 这真的很棒,你应该尝试一下。 我们总是使用localstorage来保存数据。 当我们创buildpost模型对象并保存到localStorage时,我们正在触发队列进行同步(同时我们也有定时器后台工作者用于自动运行同步过程)。 对于每个模型,我们都有独立的同步类,应该由队列同步触发器运行。 如果您的navigator.onLine => true,我们会向服务器发送更新请求。 如果你closures浏览器,无论如何你不会丢失你的数据,因为你在localStorage中有队列。 在下次客户端将第一次加载的数据与navigator.onLine => true同步。

如何使用rack-offline可以在github中查看我的小项目:

番茄-应用

祝你好运!

我个人build议你在indexedDB API的基础上编写一个包装器,检查你是否在线/离线。

  • 如果离线,只需将indexedDB存储在所有文档中,并将persisted标志设置为false即可
  • 如果在线,获取所有持续存在的文档为false,并将其存储在后端的mongodb或其他东西上,然后将新文档存储在indexedDB和服务器上,同时将persisted标志设置为true。

我写了一个小的

您将不得不增加隧道来自动设置持久标志,并将这些文档的同步隧道到后端

我面临同样的问题,并最终使用一个XML文件的存储和git来跟踪更改,并自动提交,只要有一个连接可用。 同步是通过一个shell脚本中的git commit / push / pull命令和一个启动脚本的cronjob完成的。 如果将JSON存储在文本文件中,这也可以工作。

我目前正在研究类似的web应用程序。 我决定做这样的工作stream程:

  1. 表单并未真正提交 – “提交”button实际上是将序列化表单数据保存到localStorage(在某个队列中)。 这节省了提交捕获和编写额外的error handling代码来处理表单提交期间的断开的麻烦。
  2. 数据保存后触发传输脚本。 它检查在线/离线状态。
  3. 在线时,它会尝试从队列发送最新数据到服务器(AJAX请求),并在成功时从队列中删除它(并在短暂超时后继续从队列发送下一个数据)。
  4. 它会在一段时间后重新检查(通过setTimeout())。

如果您正在使用可能很重的Ext JS / Sencha框架,它具有一个很好的数据API,支持离线(例如本地存储)和用于直接写入本地服务器的代理方法。 我使用Sencha Touch(移动专用)。

为了debuggingnetworking存储,请查看Weinre。

DerbyJS可能是最好的解决scheme。 然而,德比仍在开发中,离线支持仅在规划中,尚未实施。 在Google群组( http://groups.google.com/group/derbyjs/browse_thread/thread/7e7f4d6d005c219c )中,您可以find有关未来计划内容的附加信息。