我目前正在研究在一个最初专注于 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 (链接由克里斯托弗·约翰逊提供 - 谢谢!)关于实际方面的不同观点。只要通信模式足够简单,Web 服务就是一个可行的选择,请参阅 this thread了解在 iOS 上运行良好的选项。我总结了我的发现in this article .
最佳答案
在 Cocoa 中实现分布式对象的最简单方法是 Distributed Objects (或在 Mountain Lion 上, XPC )。这确实是获取 RMI ( here's a full example of DO ) 的一种非常简单的方法。然而,这些协议(protocol)是专有的,不能用于非 Apple 平台;虽然 GNUstep 确实使用 DO 并且我已经在跨平台项目上成功使用了它们的实现,但它们的协议(protocol)与 Apple 的不兼容。因此,您要么必须在 Mac OS X 上的 gnu-gnu-gnu
库组合中使用 GNUstep,而不是 Cocoa(我不推荐这样做),要么选择不同的方法。
CORBA 就是这样一种“不同的方法”。 CORBA 和 DO 的主要区别是:
- 在 CORBA 中,您可以使用 IDL 定义消息传递接口(interface),该接口(interface)用于生成 ObjC。通过 DO,您可以直接使用 Objective-C。
- CORBA 不支持“鸭子类型”;它是强类型的,因此您打算远程使用的每个方法都必须在 IDL 中指定。这也意味着您使用的任何方法都保证在另一端实现(当然,不保证另一端在任何 RMI 实现中可用)。
- 大多数 CORBA 用户群并不使用 ObjC(Java 和 C++ 更为常见)。
- CORBA 拥有更广泛的平台支持。
- CORBA 实现不需要在 ObjC 中。
关于cocoa - Mac OS X 上的 CORBA (Cocoa),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2848900/