我正在寻找使用特定方法、文件格式(例如 syncML)和库(funambol,其他?)在多个移动设备和网络服务器之间同步列表的经验/意见/学习?
我们希望用户能够在多个移动设备和 Web 中编辑列表,并定期同步它们,优雅地处理冲突等......而无需重新发明轮子。
非常感谢 syncML 经验、syncML 库(具有 Apache 样式许可)或其他经验。
我们正在开发:
- 用于服务器的 Java SE(appengine 和其他平台)- 所以 Java Servlet 2.3
- J2ME(在 Symbian 和其他平台上)
- iOS
- 安卓
因此,如果可能的话,希望在这些平台上有一个覆盖面广、库好的解决方案。
数据
列表中的项目将是产品。这可能与用户输入的文本名称一样简单,或者包含许多字段的结构化产品描述。我们已经为此定义了一个 XML 格式,并将对其进行改进。我们的首选是同步这些 XML fragment 的列表。
冲突
我们仍然必须准确定义如何解决冲突,或者用户是否可以选择行为——有点像 ActiveSync 和其他 PC 解决方案。我们不打算在这方面做任何新的事情。
详情
我们希望列表的每个移动“副本”都将数据存储在本地数据存储中,并带有与服务器最后同步的日期和 sinc 更改列表。我们还希望列表中的每个项目都有一个本地 ID 和一个用于在同步期间提供帮助的全局(服务器 ID)。
在线格式
我们更喜欢在同步过程中使用 XML 格式进行数据传输,它有一个或多个列表,每个列表中的项目作为元素,每个元素的 ID 作为元素的属性。
最佳答案
一个可能过于简单的想法是使用与 SVN 或 CVS 相同的方法。
- 首先,设备提取数据(结帐)。
- 同步后,它会做更新
- 如果您有任何冲突,请询问用户喜欢哪个版本(我会提供选择两者之一的选项,创建一个新版本或将它们视为两个不同的项目)
- 解决冲突后,提交当前状态
需要考虑的事情:
- 每个项目都应该与一个文件匹配(更适合复杂数据)还是所有项目(属于同一用户)都应该放在同一个文件中?
- 使用项目的 ID 可以更容易地避免具有相似内容的项目之间的虚假冲突
- 您可能应该将交换的任何项目转换为 xml 文件(或类似文件),以便更轻松地跟踪版本
- 这并不意味着您需要来回发送 xml。您可以将 xml 转换为您希望的格式(例如,将 url 编码参数转换为 xml)
- 对受修订控制的文件使用严格的格式将使事情更容易同步
解释我的最后一点:
不要按照到达的顺序对 url 参数进行编码,而是选择一些逻辑顺序。例如,“a=111&b=222”和“b=222&a=111”应该存储相同的文本。确保相同的数据始终具有相同的表示形式,即使您以不同的格式接收它也是如此。
这些只是我最初的想法......
关于iphone - 在移动和 Web 服务器之间同步对象列表的最佳解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4672299/