Mac OS X上的CORBA(Cocoa)

时间:2010-05-17 12:15:44

标签: cocoa corba nsproxy

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

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

我的问题是:

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

  2. 是否有可能以上述方式使用Gnustep和Cocoa? [编辑:根据Gnustep FAQ entry 1.1.5这是不可能的,因此使用Cocoa的原生基础设施将我锁定在这项技术中。]

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

  4. 更新:当灵活性和可扩展性成为一个问题时,CORBA似乎真的是一个更好的匹配。缺点是学习起来似乎更复杂,并且最初使用,请参阅this thread(由Kristopher Johnson提供的链接 - 谢谢!),以了解实际方面的不同观点。只要通信模式足够简单,Web服务是一个可行的选择,请参阅this thread了解适用于iOS的选项。我总结了我的发现in this article

2 个答案:

答案 0 :(得分:2)

在Cocoa中实现分布式对象的最简单方法是使用Distributed Objects(或Mountain Lion,XPC)。这实际上是获取RMI(here's a full example of DO)非常简单的方法。但是这些协议是专有的,不能与非Apple平台一起使用;虽然GNUstep使用DO并且我已经在跨平台项目中成功使用了它们的实现,但它们的协议与Apple的协议不兼容。因此,您必须在Mac OS X上的gnu-gnu-gnu库组合中使用GNUstep而不是Cocoa(这不是我推荐的),或者选择其他方法。

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

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

答案 1 :(得分:1)

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

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

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

我认为您可以更好地花时间了解如何使用Web服务,SOAP或其他主流跨平台集成技术,而不是掌握这些传统技术。