将iPhone应用程序与GWT应用程序保持同步

5
我正在开发一款iPhone应用程序,该应用程序应在离线和在线模式下正常工作。
在线模式下,它应将用户输入的所有信息提供给由GWT/GAE支持的Web服务。离线模式下,它应在本地存储信息,并在连接可用时将其同步到Web服务。
目前我的计划如下:
  1. 使用Protobuffers提供应用程序与Web服务之间的连接,以实现高效的网络通信。
  2. 使用Core Data处理本地数据库。
  3. 轮询网络状态,当网络可用时同步数据库并保持某种本地数据库到远程数据库的键同步。
问题是 - 我的方向正确吗?是否有标准的实现模式?也许有人可以指向一个类似的开源应用程序?
我对iPhone编程非常陌生,非常乐意听取任何建议。
谢谢

1
我认为你的问题更多涉及于一般的同步问题(谁是主控,iPhone上的本地更改还是GWT后端),对吧?我也很感兴趣。 - EightyEight
这正是我感兴趣的内容。将本地更改与Web服务器上的主数据集同步。 - reflog
3个回答

2

我认为您把问题搞混了。

  • 如果您有关于制作GWT网络界面的问题,那是一个问题。
  • 如何将iPhone与Web服务同步的问题是另一个问题。对于这个问题,您不想使用GWT的RPC进行同步,因为您需要在iPhone代码中模拟序列化系统的“浏览器端”,而这通常是GWT为您提供的。

我承认我的问题可能有点模糊。 关于您的第一个观点-那不是我想问的,第二个观点更接近。 我意识到我不能使用GWT的RPC,而必须提供自定义的Web服务,这就是我在问题中写的,我计划提供一个ProtoBufs接口。 我要问的是-是否有常见的工作流模式?有哪些库可以帮助将Core Data与远程数据进行同步? 教程? - reflog

0
关于系统设计方向: 首先,如果没有真正的需要,请不要创建两个不同的应用程序,一个是GWT,另一个是iPhone。创建一个良好编写的GWT应用程序即可。它可以离线工作,没有问题,并且可以使用HTML功能--离线应用程序缓存来管理您的数据。 如果必须创建两个单独的应用程序,则至少节省自己的精力,不要写两次服务器。如果您选择标准的GWT方法,您几乎肯定无法从独立应用程序与服务器通信(它是通过一些棘手的头文件压缩JSON进行HTTP传输的),或者会重复编写代码,因此请查看RestLet库,它得到了GAE的很好支持。
关于如何保持离线/在线切换同步的方式: 有几种方法可以考虑,但它们都不是完美的。因此,在考虑自己的方法时,请考虑用户的期望...不要像Microsoft Word一样试图聪明地超越用户。 如果在使用情况中至少有一种需要用户干预以合并更改的情况(而且肯定会有这种情况-铁板钉钉),那么您将必须为此实现UI-这是经常使用它的好理由-用户会习惯它。比起因为需要很少而实现了一个超级棒的合并逻辑,只在非常特殊的情况下才询问用户,让用户很长时间没有看到它,这样做更好...不要这样做。 平衡努力。因为这种代码中的错误会给用户带来比所有好处加起来更大的痛苦。
所以如何实现: 一种方法是Do-UnDo方法。 离线时,按时间顺序记录用户对数据执行的操作日志 一旦连接,发送到服务器并执行它们。从服务器到客户端也是如此。 在大多数情况下都能正常工作,只要您不是编写类似Photoshop的大量数据每个操作的软件。也被GangOfFour称为Action Pattern。

另一种方法是源代码控制方式。- 版本和甚至锁定。这非常依赖于应用程序。DBMS有时在事务实现中内部使用它。

而且,当离线时总是有只读选项的 :-)。


0

不知道您是否考虑使用同步框架来管理同步。如果您感兴趣,可以看看开源项目OpenMobster的同步服务。您可以执行以下同步操作:

  • 双向
  • 单向客户端
  • 单向设备
  • 启动

此外,所有修改都会自动跟踪并与云同步。当网络连接断开时,您可以将应用程序离线。它会跟踪任何更改,并在连接恢复时自动在后台将其与云同步。它还提供了像iCloud一样跨多个设备的同步。

此外,云中的修改使用推送通知进行同步,因此即使数据存储在本地,数据始终是最新的。

这是开源项目的链接:http://openmobster.googlecode.com

这是iPhone应用程序同步的链接:http://code.google.com/p/openmobster/wiki/iPhoneSyncApp


不再有OpenMobster了! - Michael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接