在客户端和服务器之间同步数据

时间:2014-05-15 06:20:51

标签: android ios mobile synchronization sync

我有移动应用。喜欢做清单或日历的事情。从某种程度上说,用户可以在不同的平台上拥有一些带有该应用程序的设备,依此类推。我想通过自己的服务器在它们之间创建自动同步。最佳做法是什么:更新所有信息或仅更改?一方面通常没有很多数据,当它是一个待办事项列表但谁知道?

5 个答案:

答案 0 :(得分:1)

正确的方法是日期/时间正如其他人所说,因为时间可能会不同步。正确的算法是在上次同步期间保持数据条目的校验和。在下次同步时,您将当前校验和与存储的校验和进行比较,然后您就知道服务器,客户端或两者上的条目是否已更改。

我们的开源Rethync SDK可让您轻松实现上述方法,适用于Android(目前不适用于iOS)。

答案 1 :(得分:0)

我在申请中做了类似的事情。我有一个上次修改日期字段,我需要同步每个实体。然后定期,我将这些数据发布到服务器(实际数据+日期和时间)。现在服务器可以做两件事之一。它将检查服务器端的相应数据并比较上次修改日期。如果服务器是最新的,它将返回最新的数据作为响应。如果没有,它将更新其数据并发送一个响应,指示客户端最新的数据。

当然你可以做几个优化。也就是说,将数据标记为“脏”,以便您知道是否将数据发送到服务器。如果手机没有修改数据,则您的同步基本上是从服务器获取最新数据。

基本上,服务器可以完成繁重工作并完成维护最新数据所需的所有逻辑,并适当地向客户端发送响应。

祝你好运

答案 2 :(得分:0)

最佳方法是使用时间戳来处理此问题。

  1. 对时间戳值为0的服务器的初始请求。
  2. 服务器将首次使用时间戳给出所有数据。
  3. 将时间戳存储到共享偏好。
  4. 在所有下一个请求中将时间戳传递回服务器
  5. 服务器将仅发送那些添加/更新/之后的数据 给定时间戳
  6. 就是这样。

答案 3 :(得分:0)

有一种新的同步问题替代方案。它被Orando Labs称为EnduroSync。您现在可以在Android和iOS上的设备之间同步对象数据存储,其他人即将推出。

完全披露:我为Orando Labs工作。

EnduroSync客户端允许您在本地设备上创建对象数据存储。客户端相当复杂 - 数据被建模为我们支持的每个客户端的本机对象(现在iOS和Android,更多)。客户离线和在线工作。数据将保存到本地的sqlite数据库中。

当您更改模型中的对象时,增量会记录在设备上。在某些时候,您可以“同步”对象数据存储。同步使用提交/推/拉过程(如git),但这对您来说是不可见的。同步使您的本地副本与服务器上的任何内容保持同步,并发送您所做的任何更改。使用基于时间戳的合并解决冲突,因此较旧的数据不会覆盖较新的数据。

EnduroSync是一项在线服务,因此您无需设置服务器。

还有一个灵活的权限系统,允许您以各种方式共享对象数据存储。例如,大多数应用程序将为每个用户提供一个或多个对象数据存储,用于首选项,注释,标签等。您还可以按应用程序,每个用户类型和通配符共享对象数据存储,还有许多其他方式。 / p>

所以基本上你使用我们的客户端SDK来模拟设备上的数据。建模是使用设备的本机编程语言中的简单对象。如果您注册同步服务,也可以进行同步。

答案 4 :(得分:0)

这是另一种方法。

问题:我需要从服务器预约医生与客户(移动设备)的约会。现在,约会可能会丢失,或者数据可能会在服务器上发生变化。让客户端知道更改并将请求发送回服务器可能是一项昂贵的服务。

可能的方法:让服务器完成繁重的工作。保留一个存储时间戳值的表格,以及是否发生与约会相关的更改 - 取消/重新安排等。然后客户端会查看此表格以查看是否有任何更改。实际上,我们不需要同步任何东西,只需要服务器根据它拥有的内容和客户端的内容为服务器提供的增量。需要注意的一个方面是从客户端到服务器的信息更新,并且可以在客户端和服务器之间存在数据连接时客户端可以更新服务器的情况下进行传统的冲突管理。

本质上,该方法是通过将校验和或数据更改日志维护到客户端的PUSH更改来仅同步增量。