我正在设计一个用于数据收集的Android应用程序,该应用程序预计将用于网络覆盖范围广泛的户外区域,因此客户端到服务器消息传递的稳健性非常重要。如果用户尝试提交某些内容并且请求失败或者没有网络,则应用程序需要记住该内容并稍后再次尝试,无论是按需还是恢复连接。
我们正在考虑将Firebase用于我们的数据模型,但也想评估更传统的服务器/ DB / API解决方案。 Firebase的一大优势是他们的离线"通过客户端SDK支持:
无论网络延迟如何,您的Firebase应用都将保持响应 或互联网连接。对Firebase数据库的所有写入都将 在写入任何数据之前立即触发本地事件 服务器。一旦重新建立连接,客户端就会 接收它遗漏的任何更改,将其与当前同步 服务器状态。
如果我们使用Firebase,那么免费获得它是很好的。或者,什么会给我类似的客户端功能,以支持典型的RESTful API?最好是某种类型的库,它可以为我处理状态,而不是跟踪个人的尝试。
我已经研究过像SymmetricDS这样的离线数据库同步解决方案,但在这种情况下,这似乎有些过分。事实上,我宁愿客户端没有直接的数据库访问权限。从应用程序发送的消息将是独立的条目,如照片或评论,并且不需要执行复杂的查询,同步写入等。我只需要确保用户提交的任何内容最终 在恢复连接后将其发送到服务器,并确认它确实存在。
答案 0 :(得分:1)
如果您正在考虑使用hybird-app,您可以在WebView中使用PouchDB(它支持带有SQL Lite的Cordova和Android,并且可以通过这种方式重新用于iOS)。它只能在本地使用,而不是使用它的同步功能,这些功能既简单又强大,但需要为客户提供直接的数据库访问。虽然,您可以在数据库上配置R / W访问权限和多个用户,并且每个数据库可以是每个客户端/项目,但实际上这是使用CouchDB的方式,使得扩展能力非常简单。
使用和混淆所需的底层浏览器技术很简单,并且因浏览器而异,以存储数据。因此,您不必担心浏览器支持哪种技术,例如SQL或localstorage等。与Firebase类似,它可能更适合您的情况。
您可以从浏览器中的PouchDB到CouchDB服务器,而不是简单的.sync(),您可以在数据连接可用时使用传统的REST。数据到视图层将是PouchDB,然后您可以与服务器分别管理同步并跟踪响应以验证它是否已更新。但是,如果能够满足您的要求,使用同步功能会更加简单。