cocoa - Mac OS X 上的 CORBA (Cocoa)

标签 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 都没有实际好处。]

更新:当灵活性和可扩展性受到关注时,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/

相关文章:

objective-c - OSX - 如何更改 NSButton 标题颜色

cocoa - 我如何现代化已弃用的 FSPathMakeRef、FSIsAliasFile、FSResolveAliasFileWithMountFlags、FSRefMakePath

corba - 仆人和对象 - 关系

corba - 对于跨语言程序通信,还有比 CORBA 更好的吗?

jakarta-ee - 通过远程 EJB 返回实体会导致 - java.lang.NullPointerException at com.sun.corba.ee.impl.orbutil.ClassInfoCache$ClassInfo.<init>

objective-c - 我可以自动释放 NSProxy 实例吗?

ios - 如何在没有 performSelector :? 的情况下发送未声明的选择器

objective-c - 如何在Cocoa中的App包中包含框架安装包?

cocoa - 如何在没有代理对象的情况下从 NSArrayController 获取选定的对象?

objective-c - cocoa:有什么方法可以在沙箱中的另一个应用程序中执行粘贴操作