如何在android上保持服务器和客户端之间的数据同步?

Posted

技术标签:

【中文标题】如何在android上保持服务器和客户端之间的数据同步?【英文标题】:How to keep sync of data between server and client on android? 【发布时间】:2014-10-01 01:54:00 【问题描述】:

我正在使用通知从服务器发送客户端上的条目,但可能由于某些问题而错过任何通知,这很难跟踪。现在让我们在客户端上有条目 1,2,3,5,6,8,9 但在服务器 1 到 9 上。由于两个通知导致了一些问题并且无法到达客户端,所以客户端错过了条目号 4 和 7。如何我确保当客户端下次启动应用程序时,我可以同步条目 5 和 7。一种方法是每次客户端同步时,我都会发送客户端拥有的所有条目,但如果数据太大,这不是一个可行的解决方案。

当用户清除他的数据时,我会将完整的数据同步到它,这样就可以了。

我如何以复杂的方式处理上述场景?

【问题讨论】:

【参考方案1】:

这取决于您的数据。条目是否有时间戳或 ID?一种可能性是仅发送“data_changed”事件作为推送通知。然后,客户端将提取新数据。将时间戳、id 或其他任何内容添加到服务器调用以识别最后一个已知条目。然后服务器发送将发送所有新数据。

【讨论】:

是的条目有 id。问题不在于最后一个条目,而在于任何错过的条目。即使我采用这种方法,由于某种原因我错过了一个应该介于两者之间的条目,那么我怎样才能使系统万无一失,以便它更正所有遗漏但存在于两者之间的条目。感谢您的建议。 @MiteshSharma:你是如何解决这个问题的?我打算做的一件事是:每当应用程序收到新的推送通知时-它会从本地数据库中找出最后一个条目(时间戳为“t”),然后查询服务器以获取大于时间戳“t”的所有记录因此,如果手机本地条目和您收到的推送通知之间缺少任何数据 - 我们将检索所有数据。【参考方案2】:

我们做的事情类似于@SimonSays 的回答。所有要与客户端同步的通知或数据片段都有自己的 id 和一个标志,指示客户端是否收到它。

然后,我们在后端提供了两种 rest 方法,一种是客户端用来获取新条目(那些未标记为已接收的条目),另一种是客户端通知他收到了哪些 id(如确认)。客户端不会为每个数据发送 ACK。相反,发送一个带有接收到的 id 列表的请求。

【讨论】:

【参考方案3】:

我认为您的客户端应该能够识别哪些条目丢失并且仅向服务器请求这些条目。如果没有这样的现有方法来识别客户端丢失的条目,那么您应该尽可能实现一种。

如果服务器可以通过请求确认传递给客户端的通知并再次推送丢失的条目来跟踪丢失的条目,则可能是另一种方式。

【讨论】:

以上是关于如何在android上保持服务器和客户端之间的数据同步?的主要内容,如果未能解决你的问题,请参考以下文章

如何在HTTP客户端与服务器端之间保持状态(转)

如何开发一个简单的基于数据库的项目

如何将数据从 Android 中的数据报套接字发送到 Node js 服务器?

在多个 iOS 和 Android 设备之间保持数据库同步的最简单方法是啥?

在服务器和客户端之间同步计时器 - 节点js / android / socket io

如何保持 Android Camera 的帧速率恒定