2

我目前正在研究在最初专注于 Mac OS X(使用 Cocoa)的项目中支持分布式模型对象(即在多台不同计算机上运行的计算模型)的不同方法。据我所知,有可能在NSProxy. 但似乎也有一些支持 Objective-C 的 CORBA 实现。

以后可能还需要支持/包括 Windows 机器。在这种情况下,我需要在 Windows 端使用类似 Gnustep 的东西(如果它运行良好,这可能是一个选项)或者想出两种技术的组合。或者手动编写一些东西(当然,这是最不可取的选择)。

我的问题是:

  1. 如果您对这两种技术(Cocoa 原生基础架构与 CORBA)都有经验,您能否指出这两种方法的一些关键特性/问题?(编辑:正如我在这个线程中已经指出的那样,到目前为止,iPhone 和 iPad 无法使用远程方法。另一方面,有 CORBA 实现可以在任一平台上运行,例如“ AdORB - CORBA ORB for Mac OS X和 iPhone 操作系统“。)

  2. 是否可以按照上述方式将 Gnustep 与 Cocoa 一起使用?[编辑:根据Gnustep 常见问题解答条目 1.1.5这是不可能的,所以使用 Cocoa 的本机基础设施将我锁定在这项技术中。]

  3. 使用 Cocoa 的技术在所有 Mac OS 客户端之间以及通过 CORBA 与 Windows 客户端进行通信是否有可能(并且相当可行,即比手动编写网络层更简单)?[编辑:从我现在了解到的情况来看,这是可能的,但肯定不可行。消息必须以两种方式转发,即一个系统需要一个“代理”来将消息从一个系统转发到另一个系统,反之亦然。这本质上等同于手动编写网络层,而没有从NSProxy类集群或 CORBA 中获得任何实际好处。]

更新:当灵活性和可扩展性是一个问题时,CORBA 似乎真的是一个更好的匹配。不利的一面是,最初学习和使用它似乎更复杂,请参阅此线程(由 Kristopher Johnson 提供的链接 - 谢谢!)以了解有关实际方面的不同观点。只要通信模式足够简单,Web 服务就是一个可行的选项,请参阅此线程以了解在 iOS 上运行良好的选项。我在这篇文章中总结了我的发现。

4

2 回答 2

2

在 Cocoa 中实现分布式对象的最简单方法是使用分布式对象(或者在 Mountain Lion 上,XPC)。这确实是获取 RMI 的一种非常简单的方法(这里是 DO 的完整示例)。然而,这些协议是专有的,不能用于非 Apple 平台;虽然 GNUstep 确实使用了 DO,而且我已经在跨平台项目中成功使用了它们的实现,但它们的协议与 Apple 的协议不兼容。因此,您要么必须gnu-gnu-gnu在 Mac OS X 上的库组合中使用 GNUstep 而不是 Cocoa(我不建议这样做),要么选择不同的方法。

CORBA 就是这样一种“不同的方法”。CORBA 和 DO 之间的主要区别是:

  • 在 CORBA 中,您使用用于生成 ObjC 的 IDL 定义消息传递接口。使用 DO,您可以直接使用 Objective-C。
  • CORBA 不支持“鸭子打字”;它是强类型的,因此您打算远程使用的每个方法都必须在 IDL 中指定。这也意味着您使用的任何方法都保证在另一端实现(当然另一端不保证在任何 RMI 实现中可用)。
  • 大多数 CORBA 的用户群不在 ObjC 上(Java 和 C++ 更常见)。
  • CORBA 具有更广泛的平台支持。
  • CORBA 实现不需要在 ObjC 中。
于 2010-10-14T10:29:42.137 回答
1

FWIW,除非您拥有需要与之交互的现有基于 CORBA 的基础架构,否则我不会使用 CORBA。

CORBA 在当时还不错,但它是一项“垂死的”技术,您将很难获得必要的支持。还有一个相当陡峭的学习曲线。

如果你想要跨平台的东西,我也会远离 Cocoa/Gnustep 的东西,因为除了 OS X 和 iOS 之外,它在任何地方都没有得到很好的支持。

与其掌握这些遗留技术,我认为您最好花时间弄清楚如何使用 Web 服务、SOAP 或其他主流跨平台集成技术。

于 2010-08-23T14:26:44.937 回答