angularjs – 在PhoneGap中与服务器同步数据的策略

前端之家收集整理的这篇文章主要介绍了angularjs – 在PhoneGap中与服务器同步数据的策略前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我开始我的第一个PhoneGap项目,使用AngularJS。它是一个数据库驱动的应用程序,使用REST API作为后端。首先,我不会在本地存储数据,所以它不会做很多没有互联网。

但是,我最终希望它在本地存储数据,并在互联网可用时进行同步,因为我知道我个人禁用在我的手机上的Internet连接(飞机,低电量)或没有酒吧。我想知道,如果你能指向我这种类型的同步的一些好的资源。一些推荐的图书馆?或者也许有一些讨论的陷阱和如何环游它们。我有谷歌,但我想现在,我不知道的问题要问。

此外,我的意图,建立它依赖互联网,然后添加同步….这是一个好主意,还是我在脚射击自己?我需要从一开始就构建它的同步吗?

我有人建议将应用程序构建为本地首先,而不是只有Internet的部分第一,它有一定的逻辑。远程存储对我来说很重要。我知道决定有很多关于我的应用程序的目标,但从建立这一点,最终的目标是本地存储互联网存储和双向同步,什么会更容易?还是甚至有所作为?

首先,我想使用UUID,而不是连续整数主键。我还想到了为每个设备分配一个ID,它在它生成的任何键上加上前缀,但这似乎很微妙。任何人使用这两种技术?想法?

我想我需要一个好的系统来告诉哪些数据已同步。在客户端,我想任何创建/编辑的记录,可以标记为同步。但在服务器端,你有多个客户端,所以这不会工作。我想你可以有一个last_updated时间戳,并同步所有更新同步上次成功同步。

在多个地方编辑的记录怎么样?如果两个客户端编辑,然后想要同步,你对合并有一些歧义,就像在git或其他版本控制系统中合并分支时。你如何处理呢?我想git它通过存储每个提交的diffs。我想你可以存储diffs?我越想这个,它更复杂的声音。我是过度思考还是不足的思考?

客户端存储怎么样?我想过sqlite,或PhoneGap本地存储的东西(http://docs.phonegap.com/en/1.2.0/phonegap_storage_storage.md.html)。建议?同步将通过一个REST API,交换JSON,所以我想一些实际存储数据为JSON,或者一些类似JSON的,很容易转换,会很好。另一方面,如果我要交换某种数据差异格式,也许这是我需要存储?

让我根据我对同步部分的经验提供您的问题的答案,因为我没有PhoneGap的足够的经验,所以将跳过有关PhoneGap本地存储和sqlite的问题。

I was wondering if you could point me toward some good resources for this type of syncing. Some recommended libraries?

有许多开源项目用于将PhoneGap应用程序与远程服务器同步。但是你可能需要根据自己的需要调整它们,或者实现自己的同步功能。下面我列出了一些开源项目。你必须知道他们,如果你搜索网。

> PhoneGap sync plugin
> Simple Offline Data Synchronization for Mobile Web and PhoneGap Applications
> Synchronize a local WebSQL Db to a server
> Couchbase Lite PhoneGap plugin

此外,您可以考虑其他选项,但这取决于您的服务器端:

> Microsoft Sync Framework Toolkit(Html5示例可用)
> OpenSync Framework – 平台无关,通用同步引擎

Also,my intent to build it Internet-dependent first,and then add syncing…. Is that a good idea,or am I shooting myself in the foot? Do I need to build it syncing from the start?

我相信同步功能更像是一个额外的模块,不应该紧紧地与其余的业务逻辑耦合。一旦你开始考虑测试同步的策略,你会发现,如果你的同步工具与主代码是分离的,测试会更容易。

我认为您可以使用所需的最低功能尽快启动您的应用,而无需同步。但你最好考虑你的架构和你提前添加同步设施的方式。

To start with,I’m thinking of using UUIDs,rather than sequential integer primary keys. I’ve also thought about assigning each device an ID that is prefixed on any keys it generates,but that seems delicate. Anyone used either technique? Thoughts?

这取决于您的项目规格,特别是您的服务器端。例如,Azure移动服务仅允许主键的整数类型。虽然唯一标识符作为主键在分布式系统中非常方便(也有一些缺点)。

与分配设备ID相关 – 我不知道我理解这一点,虽然我不知道你的项目细节。看看我们的系统中使用的同步算法(bidirectional sync using REST between multiple Android clients and central SQL Server)。

What about records edited in multiple places? If two client edit,and then want to sync,you have some ambiguity about merging,like when merging branches in git or other version control systems. How do you handle that? I guess git does it by storing diffs of every commit. I guess you could store diffs? The more I think about this,the more complicated it sounds. Am I over-thinking it or under-thinking it?

这是您需要考虑如何处理您的系统中的冲突解决方案的地方。

如果您的系统中的冲突概率很高,例如用户将经常更改相同的记录。然后,您最好跟踪记录的哪些字段(列)已在同步中修改,然后一旦检测到冲突:

>迭代通过服务器端记录的每个修改字段冲突>将服务器记录的每个修改字段与客户机的相关字段进行比较。>如果客户端字段未被修改,则没有冲突,因此只需使用服务器字段覆盖它。>否则会出现冲突,请将两个字段的内容保存到报表的临时位置>在同步结束时产生冲突中的记录的报告。

猜你在找的Angularjs相关文章