6

我正在尝试评估一些技术来实现一些 Ada 模块与一些 C++/OpenGL 模块之间的通信过程。有一个(Windows XP)Ada 应用程序使用 COM 与 C++ 应用程序通信,但我打算将 COM 切换到新技术。提出了一些建议,例如直接 Sockets、DSA、Polyorb、Corba 和 DSS/Opensplice。

我个人喜欢COM,但由于迁移的原因,我宁愿选择sockets选项,因为它很简单,而且接口架构可以很容易地实现。

那么,你怎么看?您能否对这些技术发表评论,甚至提出其他更多建议?

非常感谢。

4

5 回答 5

5

您选择的一个重要因素是您正在重新设计的系统的规模和复杂性。它是一个包含大量复杂消息的广泛分布式系统吗?它是一个相对较小的系统,只有少数普通的消息交换吗?

对于小型系统,我过去只是滚动我自己的基于套接字的通信模块。不过,现在我更倾向于ZeroMQ(无代理)或STOMP(基于文本)。还有一些对这些的 Ada 支持,zeromq-AdaTOMI_4_Ada(两者都支持)。

虽然这些处理分发机制,但您仍然需要处理将消息序列化为可传输形式。

CORBA/PolyORB 和 DDS 解决方案是相当重量级的,但却是完整的解决方案。如果你不害怕 IDL 和管理代理,它们可以很好地用于大型分布式系统。是的,可能需要构建一些 Ada 绑定,但是如果您可以获得 C 标头或 C API 来绑定,那么如果您只专注于绑定您需要的函数和数据结构,这通常不会太糟糕。与其创建一个全面的绑定,不如自由地使用 opaque 和 void 指针(void_ptropaque_structure_def_ptr)用于您不关心其内部内容的结构和参数。

于 2011-10-20T17:32:13.037 回答
3

我们打算将 COM 切换到新的(支持的)技术,因为 Microsoft 不再支持 COM

告诉你 COM 不再受支持的人完全一无所知。

虽然 COM 在过去几十年中经历了许多名称更改(OLE、COM、OLE 自动化、DCOM、COM+、ActiveX、WinRT)和扩展,但它是 MS 平台最重要的单一技术:过去、现在和未来。 .NET 运行时广泛使用 COM。Win32 API 的大部分是用 COM 编写的,而未编写的部分将在 Win8 中,因为WinRT 组件是 COM 对象

于 2011-10-20T20:14:14.167 回答
2

还要看看 AMQP(服务器的RabbitMQ),似乎有可用的 Ada 库http://www.gti-ia.upv.es/sma/tools/AdaBinding/index.php

如果你能找到 Ada 的绑定,Apache thrift也可能是一个轻量级的选择。也许您甚至可以编写自己的绑定,在套接字上滚动您自己的东西应该不会更困难。

如果您确实使用套接字路由,那么我建议将ZeroMQ作为“超级套接字”。

于 2011-10-21T06:31:47.897 回答
1

您的列表中的另一种选择应该是使用 Ada 的分布式编程支持,并编写 C/C++ 包装器以将您的 C++ 程序连接到其中。

我不知道它是满足您需求的最佳选择,但如果您的 Ada 编译器支持附件 E,它应该在列表中。

于 2011-10-20T17:56:32.760 回答
0

自从这篇文章以来,AdaCore 在 GitHub 上发布了 PolyORB并定期更新 :)

于 2018-09-27T08:58:28.273 回答