有啥比 CORBA 更适合跨语言程序通信的吗?

Posted

技术标签:

【中文标题】有啥比 CORBA 更适合跨语言程序通信的吗?【英文标题】:Is there anything better than CORBA for interlanguage program communication?有什么比 CORBA 更适合跨语言程序通信的吗? 【发布时间】:2009-12-11 13:38:47 【问题描述】:

我在一个项目中使用 CORBA 来读取可以用 C++ 或 Java 实现但符合相同 IDL 的对象数据。优点是 idlj 编译器,所有必要的代码都随 Java 免费提供。骗局似乎是我听说很多 CORBA 是旧的,而不是最新和最伟大的。但我还没有听到任何更好的名字。有吗?

【问题讨论】:

【参考方案1】:

有很多方法可以进行进程间通信。这里有一些我想不到的。

SOAP XML-RPC Sockets

但是,在你切换之前你需要问问自己

新协议有什么好处 您在使用 CORBA 时遇到了什么痛苦?当然,它是一项成熟的技术,但如果它满足您的要求,它本身并不是放弃它的理由。 切换到您选择的任何新协议需要多长时间。

删除 CORBA(或任何协议/堆栈/库),因为您听说那里有更好、更闪亮、更酷的东西,这不是一个好主意。

删除它们,因为它们会给您带来特定的问题,或者因为新事物允许您执行现有技术无法完成的特定任务,这是切换的一个很好的理由。

【讨论】:

感谢您的明智建议以及所有其他答案。我是进程间通信的新手,而且它还处于开发过程的早期阶段,所以我很高兴现在知道这些其他技术,然后再对 CORBA 进行过多投资,因为这就是我现在所拥有的。 如果您在产品开发中足够早,那么我会考虑使用 CORBA。我并不是说不要使用它,但如果你这样做了,那么你应该有一些非常好的理由来使用它(尽管这适用于任何技术决策)【参考方案2】:

嗯,总有 SOAP,这是当今这类事物中更常见的技术。它的绑定没有那么紧,但它可以工作。

【讨论】:

【参考方案3】:

如果我开始一个新项目,我真的无法想象选择 CORBA,而且我过去已经使用过很多次了。编程真的很可怕。那里有很多更好的替代品,尽管其中许多是专有的(当然,大多数 CORBA ORB 也是如此),例如 TIBCO。在任何情况下,您都不应该仅仅因为某项技术恰好安装在您的 PC 上而选择它。

【讨论】:

更正; ORB 实现可以是专有的,但有几个开源 ORB 实现。这些开源实现可以存在的原因是因为 CORBA 是一个开放规范。专有解决方案(例如 TIBCO 建议)并非如此。最后一句话是最好的建议。【参考方案4】:

看看Googles Protocol Buffers。

什么是协议缓冲区?

协议缓冲区是 Google 的 语言中立,平台中立, 可扩展的序列化机制 结构化数据——想想 XML,但是 更小、更快、更简单。你 定义你希望你的数据如何 结构化一次,然后你可以使用 专门生成的源代码 轻松编写和阅读您的结构化 来自和来自各种数据的数据 流和使用各种 语言 – Java、C++ 或 Python。

摘自常见问题:

协议缓冲区与 ASN.1、COM、CORBA、Thrift 等有何不同?

我们认为所有这些系统都有 长处和短处。谷歌 内部依赖于协议缓冲区 它们是我们的重要组成部分 成功,但这并不意味着他们 是每个人的理想解决方案 问题。你应该评估每个 在你自己的情况下替代 项目。

值得注意的是, 其中一些技术定义了 交换格式和 RPC (远程过程调用)协议。 协议缓冲区只是一个 交换格式。他们可以很容易地 用于 RPC - 事实上,它们确实如此 对定义 RPC services 的支持有限——但它们与 任何一种 RPC 实现或 协议。

【讨论】:

协议缓冲区负责序列化数据,但它没有指定进程间通信,是吗? CORBA 涵盖了序列化/表示,以及远程方法调用、对象代理等。 ICE 做了 Protocol Buffers 做的事情,也涵盖了进程间通信。 ICE 似乎比 CORBA 好,见zeroc.com/iceVsCorba.html【参考方案5】:

查看Internet Communication Engine (ICE)。

阅读comparison between CORBA and ICE。

ICE 更简洁、更强大,而且学习曲线更短。文档广泛而全面(我见过的最好的),并且在所有受支持的语言中都有大约 50 个示例程序。恕我直言,真的没有可比性。

【讨论】:

以上是关于有啥比 CORBA 更适合跨语言程序通信的吗?的主要内容,如果未能解决你的问题,请参考以下文章

从命令行向 python 程序传递参数,有啥比 sys.argv 更好的吗? [复制]

有啥比 document.execCommand 更好的吗?

有啥比 dict() 更快的吗?

这段代码有啥比 boost mutex 更快的吗?

.NET 中有啥比 SqlDataReader 更快的吗?

pytest 3.x 有啥比 2.x 重要的东西吗?