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

4
有没有一种简单的方法来管理Web应用程序的离线数据,并在有连接时与服务器同步?我一直在研究Meteor、CouchDB等工具,但仍不确定什么是最轻松的方式。
当然,我可以使用套接字或类似的东西自己实现它,但如果已经有为此目的制作的工具,我就看不到再次这样做的理由。
我计划使用Node作为服务器。谢谢。

有一个名为now.js的模块,旨在实现类似的功能,但该项目现已被放弃(尽管它可能非常有用)。http://news.ycombinator.com/item?id=4667826 - Anderson Green
2个回答

2
你在讨论两件事情; 1) 如何在离线时存储/持久化数据(存储机制),2) 在在线时如何与服务器同步(通信机制)。对于第一点,可以使用某种本地存储方式进行存储,具体取决于平台,可以使用localstorage、websql、文件系统API等多种方法。对于第二点,真正的答案取决于您的同步需求有多紧急,但通常你可以使用HTTP本身进行定期(长)轮询、WebSockets和类似的方式进行通信。
在存储和通信机制之上,有许多库使得工作更加简单,比如Meteor(通信)和CouchDB(存储),还有许多其他的库。甚至有一些库可以处理实际的同步机制(可能还包括冲突解决),但这非常取决于您的实际应用程序。
更新:这个框架看起来很有前途,但我自己没有测试过:http://blog.nateps.com/announcing-racer-experimental-realtime-model

我知道许多本地存储的方法,以及如何发送和接收数据。我的问题是是否已经有一个能够将所有这些功能打包在一起的解决方案。我正在认真考虑使用Meteor,但由于它仍处于beta阶段,我想知道是否有类似的东西存在。是否有任何可以在客户端“保存”到数据库并从其余部分中简单抽象出来的解决方案。 - danielsvane
在这里搜索“html5离线同步”会得到很多讨论技术的答案,但几乎没有现成的解决方案。也许“易用”和“解决所有用例”可能是互相排斥的,所以一切都取决于您的具体用例(单向同步、双向同步、一对一、一对多、多对多)。 - Marius Kjeldahl
谢谢你的帮助。我进行了一些测试,Meteor 显然完全符合我的要求。离线时,应用程序仍然像平常一样工作,并将服务器视为非常缓慢。当它重新连接时,它会同步所有数据。 - danielsvane

1

您可能也想考虑云服务。如果您正在开发新应用程序,云服务是最佳选择,因为它们将您推向无服务器模型,并且当然您必须乐意使用服务。

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

对于非云服务,Derbyjs)是一个开源项目,包括Racer,一个数据同步库(早期答案中提到的),两者都在快速发展中,但如果您的时间允许,并且不需要云服务,则看起来很有趣。有一个Derbyjs与Meteor的比较,这很有用-尽管它是由Derbyjs开发人员编写的,但并不太偏袒。
我还看了一下CouchDB,它具有一些有趣的内置复制功能,但我不喜欢它使用索引的方式,当查询需要它们时(或通过批处理)才会懒惰地更新它们,并且我不满意直接将服务器DB暴露给客户端以启用复制/同步。通常,我认为最好将客户端本地存储与服务器端DB解耦,当然对于Web应用程序来说,在客户端使用CouchDB会很困难。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接