1

标题基本上是这样说的。我有一个可用作网络应用程序和移动应用程序的应用程序。移动应用程序接收数据并将数据发送到服务器。进行同步时有几种情况需要涵盖,但我需要以某种方式知道哪个是最新的编辑。我计划在移动应用程序的启动和停止时同步。最困难的情况可能是当用户在没有互联网的情况下启动应用程序并关闭它仍然没有互联网。如何解决这个问题?

请注意,时间戳是无用的,因为您使用的是用户可能会更改时钟的移动设备。

你有什么建议?我不想向用户询问解决冲突的问题,但要实现一些自动化。(只取最新的)

谢谢

4

3 回答 3

4

时间戳不是无用的,您只需要重新考虑如何使用它。在这种情况下,服务器时间就是上帝。当移动设备与服务器建立联系时,移动设备可以让服务器知道所讨论的数据是多久以前创建的。然后,一旦信息被传输,服务器就知道将该数据的时间设置为服务器上的当前时间减去移动设备提供的时间量。

例如:

  • 早上 8 点您的数据直接在 webapp 上更新 - 正确时间
  • 上午 9 点在移动设备上更新数据 - (无网络访问 + 时间不可信)
  • 上午 10 点更多数据更新到 webapp(服务器上目前有 2 个数据条目)
  • 上午 11 点,您的手机获得网络访问权限并联系服务器。你的手机知道上午 9 点的数据是 2 小时前的数据,所以它需要告诉服务器。服务器收到数据,现在知道它是 2 小时前的。服务器能够使用以下时间戳保存新信息:(服务器上的当前时间 - 2 小时)。

这样,无论移动设备上的时间如何,上午 9 点数据的时间都是正确的。

于 2013-09-26T08:20:55.107 回答
1

试试http://www.couchbase.com/communities/couchbase-lite。它是适用于 iOS 和 Android 的嵌入式 NoSQL 存储,能够与 CouchDB 和 Couchbase Server 同步。

于 2013-09-29T14:15:11.573 回答
1

我不敢苟同:多久以前是相当冒险的。例如,一些国家有夏令时

我认为您应该研究像 couchdb(和他的 sqlite 表弟:pouchdb)这样的现成解决方案:您可以进行显式或隐式同步,并且在解决冲突方面已经做了很多工作 http://guide.couchdb.org/draft/冲突.html

于 2013-09-29T12:15:16.670 回答