用于与服务器同步数据的Web应用程序

时间:2012-05-31 13:22:59

标签: node.js web-applications offline-caching

是否有一种简单的方法可以使用Web应用程序管理离线数据,并在有连接时与服务器同步?我一直在关注Meteor,CouchDB等等,但仍然不确定什么是最不痛苦的方式。

我当然可以使用套接字或类似的东西来实现它,但如果已经为此目的制作了某些内容,我认为没有理由再次这样做。

我打算将Node作为服务器。

由于

2 个答案:

答案 0 :(得分:1)

你说的是两件事; 1)如果/何时离线(存储机制)如何存储/保存数据,以及2)如何在线时与服务器同步(通信机制)。 1的答案是某种本地存储,根据您的平台,有几种方法(localstorage,websql,文件系统API等)。 2的答案实际上取决于您的同步需求有多紧迫,但一般情况下,您可以使用HTTP本身进行定期(长)轮询,websockets等。

除了存储和通信机制之外,还有许多库可以简化工作,如Meteor(通信)和CouchDB(存储),还有许多其他库。甚至有一些库可以处理实际的同步机制(也可能有冲突解决方案),但这在很大程度上取决于您的实际应用。

更新:这个框架看起来很有希望,但我自己没有测试过:

http://blog.nateps.com/announcing-racer-experimental-realtime-model

答案 1 :(得分:1)

您可能也想查看云服务。如果您正在开发一个新应用程序,因为它们会将您推向无服务器模型,那么这些是最好的,当然您必须对使用服务感到满意。

Simperium)是一个有趣的云服务 - 我今天唯一可以找到同步的服务(与Firebase和Spire.io不同,在其他方面相似),对于iOS它包括离线存储,而对于JavaScript客户端,您需要使用HTML5功能自己覆盖本地存储。 Backbone.js似乎对此有一些支持,Simperium可以使用类似的API风格与Backbone集成。

对于非云服务,Derbyjs)是一个开源项目,包括Racer,一个数据同步库(前面的答案提到) - 两者都处于快速发展阶段,还没有完整,但如果您的时间表允许,并且不需要云服务,那么看起来很有趣。有一个comparison of Derbyjs to Meteor是有用的 - 尽管它是由Derbyjs开发人员编写的,但它并没有太大的偏见。

我还查看了CouchDB,它有一些有趣的内置复制功能,但我不喜欢使用在查询需要时(或通过批处理)懒得更新的索引,而且我不是'很高兴将服务器数据库直接暴露给客户端以启用复制/同步。通常我认为最好将客户端本地存储与服务器端DB分离,当然对于Web应用程序来说,在客户端上很难使用CouchDB。