【问题标题】:Framework Recommendation for developing distributed iPhone / iPad applications开发分布式 iPhone / iPad 应用程序的框架建议
【发布时间】:2010-09-14 22:15:42
【问题描述】:

是否有支持 iPhone / iPad 的分布式应用框架(商业也可以)?

我在框架中寻找什么:

  • 让我可以专注于应用程序逻辑
  • 我不必编写“低级”网络编程(我已经做过太多次了,我不想再做一次 =p)
  • 应该积极维护(流行会很好)

基本上,我可以发展得更快。

我们计划开发一个软实时 TCP/IP 客户端/服务器应用程序,其中有许多 iPhone/iPad 客户端 (30+) 通过 LAN 连接到单个服务器。服务器很可能会运行 Windows(除非框架不支持它)。

我一直在环顾四周,我看到了:

我仍在决定是使用 Objective-C 还是 MonoTouch,但倾向于 MonoTouch,因为我们将获得 .NET 框架,而不仅仅局限于 Mac 世界。

如果我添加了与我的问题无关的任何内容,请随时发表评论——我是 iPhone/iPad 世界的新手。

【问题讨论】:

  • Per Franci 的回答如下:是的,我正在寻找 RPC 样式。此外,我以前从未使用过 POX 或 JSON,因此我无法对此发表评论。
  • 想补充一点,可以使用 protbuf-net 进行反序列化code.google.com/p/protobuf-net

标签: iphone ipad ios4 xamarin.ios distributed-apps


【解决方案1】:

我们在使用 WCF/Monotouch 方面取得了巨大成功 - 工作的某些领域不是 100%,但在大多数情况下,您应该会发现在 monotouch 上使用 WCF 是一件轻而易举的事。

在 monodroid 和 monotouch 以及 wm7 之间共享我们所有的数据同步、模型、测试等的能力非常酷(通过一些工作 - 这很容易 - 您需要管理多个 prj 文件)。

注意正确管理对 wcf 服务的调用,将它们保持在最低限度,保持架构简单。我们最终得到了一个相当复杂的 dto,以最大限度地减少对 wcf 服务的调用以同步数据 - 这是非常值得的,因为从头开始同步设备所需的时间现在只是原来的一小部分。

使用 SSL 与服务器通信是一个 PITA,但我认为这更像是苹果管理它的方式。

【讨论】:

  • WCF/MonoTouch 能否与 Microsoft .NET WCF 服务通信?例如用 Monotouch 编写的 iPhone 应用程序可以与运行 .NET 框架的 Windows 机器通信吗? (对不起,如果这是一个愚蠢的问题..我只是新手)
  • 是的 - 它可以 - 你使用 silverlight svcutil 和 noConfig 开关创建代理,并在你的 monotouch 项目中包含生成的类 - 这非常简单 - 在 obj c 中做任何类似的事情都是完整的不,不,因为它只需要这么多的混乱。
【解决方案2】:

您需要更明确地说明您的要求。如果您只需要通过 REST API 进行对象序列化(脱水/水合),那么任何支持 POX 或 JSON 的东西都适合您。但是,如果您需要 RPC 样式的方法调用,以及身份验证、加密/数字签名、事务等,那么您需要上面列出的那些框架之一。

如果您需要一个框架,我个人会倾向于 MonoTouch WCF,因为它使您能够稍后将您的客户端移动到其他平台(例如 Windows Phone 7)。再说一次,正如你所说,现在有点粗糙,如果 Mono 团队将来决定他们没有资源来投资维护它,你可能最终不得不转移到另一个框架。当然,还有一个缺点就是你的应用需要使用MonoTouch,而不能使用Objective-C。诚然,随着 iOS 开发者协议的最新变化,这不是什么大问题,但仍然需要牢记。

(免责声明:我曾经在微软的WCF团队工作,所以我对产品本身有偏见)

我会选择的另一个选项是 Cocoa 分布式对象。但是,如果服务器也在 OS X 上运行,那将是我的选择。我知道有适用于 Windows 的 Bonjour,但我怀疑它是否针对服务器场景进行了优化,而且我也不知道 Apple 在它之上的 RPC 实现有多丰富适用于 Windows 平台。因此,只有在专门为 Apple 平台构建时,我才会继续使用 Apple 的技术。

请注意,WCF 和分布式对象将为您提供 RPC 样式的功能,但它们不会帮助您处理任何特定场景。如果您需要/想要更高级别的抽象,例如您需要在线信息或多用户聊天,您仍然需要自己实现这些。此时可能值得查看为您提供这些功能的框架。一个示例是 RakNet(您在上面列出),它抽象了远程处理级别并在其之上构建了其他功能。

【讨论】:

    【解决方案3】:

    您可以使用 JSON Touch + Vitche PHP Emission Framework,它提供了您需要的所有服务器端。您还可以使用该框架来访问现有的 SOAP(WCF、Axis 等)服务。

    【讨论】:

      【解决方案4】:

      您可以使用 Google 协议缓冲区来实现 RPC,但无论如何您都需要进行一些网络编程来传输您的消息。它支持 C++、Java、Python 和 Objective-C 和 .NET 的接口生成,因此您可以创建一组 RPC 消息并获取代码,以便在几乎任何移动平台上使用它们。您必须自己实现移动平台上的传输层。

      http://code.google.com/apis/protocolbuffers/ - 主 Protobuf 页面(C++、Java、Python) http://code.google.com/p/protobuf-net/ - 其中一个 cmets 中提到的 Protobuf .NET http://code.google.com/p/metasyntactic/wiki/ProtocolBuffers - Obj-C 的 Protobuf

      【讨论】: