我目前正在研究在最初专注于Mac OS X(使用Cocoa)的项目中支持分布式模型对象(即,在几台不同计算机上运行的计算模型)的不同方法。据我所知,有可能在NSProxy
周围使用类集群。但是,似乎还有Objective-C支持的CORBA实现。
稍后可能还需要支持/包含Windows机器。在这种情况下,我需要在Windows端使用类似Gnustep的东西(这可能是一个选项,如果它运作良好)或提出两种技术的组合。或者手动写一些东西(当然,这是最不可取的选择)。
我的问题是:
如果您有这两种技术的经验(Cocoa原生基础设施与CORBA),您能否指出这两种方法的一些关键特性/问题? (编辑:正如我在this thread远程方法中已经指出的那样,到目前为止iPhone和iPad都无法使用。另一方面,有任何平台可以使用CORBA实现,例如“AdORB - CORBA ORB for Mac OS X and iPhone OS”。)
是否有可能以上述方式使用Gnustep和Cocoa? [编辑:根据Gnustep FAQ entry 1.1.5这是不可能的,因此使用Cocoa的原生基础设施将我锁定在这项技术中。]
是否有可能(并且合理可行,即比手动编写网络层更简单)在使用Cocoa技术的所有Mac OS客户端和通过CORBA与Windows客户端之间进行通信? [编辑:根据我现在所学到的,这是可能的,但肯定不可行。消息必须以两种方式转发,即,需要“代理”来将消息从一个系统转发到另一个系统,反之亦然。这基本上等同于手动编写网络层,而NSProxy
类集群和CORBA都没有实际好处。]
更新:当灵活性和可扩展性成为一个问题时,CORBA似乎真的是一个更好的匹配。缺点是学习起来似乎更复杂,并且最初使用,请参阅this thread(由Kristopher Johnson提供的链接 - 谢谢!),以了解实际方面的不同观点。只要通信模式足够简单,Web服务是一个可行的选择,请参阅this thread了解适用于iOS的选项。我总结了我的发现in this article。
答案 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之间的主要区别是:
答案 1 :(得分:1)
FWIW,除非您需要与基于CORBA的基础架构进行交互,否则我不会使用CORBA。
CORBA当时还不错,但它是一种“垂死”的技术,你将很难获得必要的支持。还有一个相当陡峭的学习曲线。
如果你想要一些跨平台的东西,我也会远离Cocoa / Gnustep的东西,因为除了OS X和iOS以外的任何地方都没有得到很好的支持。
我认为您可以更好地花时间了解如何使用Web服务,SOAP或其他主流跨平台集成技术,而不是掌握这些传统技术。