我目前正在使用所有html5好东西编写离线网络应用程序以获得离线支持。但是,我现在开始考虑编写同步模块,以确保将任何脱机数据发送到服务器并将服务器数据发送回客户端。现在我确信这已经完成了,我的意思是它是一个非常经典的设计问题,影响移动设备和其他许多东西。所以我想知道有人能指出我为这种事情提供一些好的设计资源吗?
现在我真的不需要过于复杂,我的意思是我没有处理访问相同数据的多个用户,我很高兴不合并冲突(只需要采取最新的),但我仍然希望设计,将来允许我这些选择。
此外,是否有任何开源项目实现此类事情?我不会扯掉其他人的代码(如果许可证允许的话),我很乐意移植。
答案 0 :(得分:10)
我对类似设计(尚未尝试过)的计划是使用PouchDB之类的东西在本地存储数据,然后将其与远程沙发实例同步。
答案 1 :(得分:9)
我有类似的问题。我决定使用纯粹的JSON进出方法。我正在提交表单的解决方案是:
然后我有在线/离线事件的全局事件挂钩。当用户重新联机时,它会检查队列,如果队列中有项目,则会将其作为JSON POST请求发送。
如果您主要对获取 JSON数据感兴趣并将其缓存以供离线使用,请查看jquery.offline。
同时进行同步的挑战是您需要使用已排队的任何CRUD工作更新本地缓存列表。
我想找到一种更通用的方法来做到这一点。
答案 2 :(得分:6)
查看Derby,一个Node MVC框架,它具有一些非常甜蜜的同步和冲突解决功能。 http://derbyjs.com/
答案 3 :(得分:4)
在我们的团队中,我们已经在离线/在线模式下开发了应用程序。
我们正在使用以下以下的库:
使用机架离线我们正在缓存所有资源文件和jst模板以在页面上呈现内容。 backbonejs和backbonejs-localStorage有助于在客户端上创建MVC应用程序。它非常棒,你应该尝试一下。我们总是使用localstorage来保存数据。当我们创建post例如模型对象并保存到localStorage时,我们正在触发队列进行同步(我们也有定时器后台工作程序用于自动运行同步过程)。对于每个模型,我们都有单独的同步类,应该由队列同步触发器运行。如果你的navigator.onLine =>是的,我们正在向服务器发送包含更新数据的请求。如果您关闭浏览器,无论如何您都不会丢失数据,因为您在localStorage中有队列。在下次客户端将使用navigator.onLine =>同步第一次加载时的数据真。
如何使用机架离线,您可以在github中查看我的小项目:
祝你好运!答案 4 :(得分:1)
我遇到了同样的问题,最后使用XML文件进行存储,git跟踪更改并在连接可用时自动提交。使用shell脚本中的常用git commit / push / pull命令和启动脚本的cronjob完成同步。如果将JSON存储在文本文件中,这也可以。
答案 5 :(得分:1)
我目前正在开发类似的webapp。我决定做这样的工作流程:
答案 6 :(得分:1)
如果您准备使用可能很重的Ext JS / Sencha框架,它有一个很好的数据API,具有离线(例如localStorage)支持和写入本地服务器的代理方法。我使用Sencha Touch(特定于移动设备)。
有关调试网络存储的信息,请查看Weinre。
答案 7 :(得分:1)
答案 8 :(得分:1)
我个人建议您在indexedDB API上编写一个包装器,检查您是否在线/离线。
您必须扩充隧道以自动设置持久标志,并将这些文档的同步隧道传输到后端