2

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

我在框架中寻找什么:

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

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

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

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

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

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

4

4 回答 4

2

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

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

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

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

于 2010-09-16T09:05:56.457 回答
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(您在上面列出),它抽象了远程处理级别并在其之上构建了附加功能。

于 2010-09-14T22:52:44.140 回答
2

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

于 2011-05-16T16:19:40.023 回答
1

您可以使用 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/ - Protobuf .NET 在其中之一中提到评论 http://code.google.com/p/metasyntactic/wiki/ProtocolBuffers - Obj-C 的 Protobuf

于 2010-09-16T13:38:44.897 回答