我正在尝试评估一些技术,用于实现一些 Ada 模块与一些 C++/OpenGL 模块之间的通信过程。有一个 (Windows XP) Ada 应用程序使用 COM 与 C++ 应用程序进行通信,但我打算将 COM 切换到新技术。提出了一些建议,例如直接套接字、DSA、Polyorb、Corba 和 DSS/Opensplice。
- DSA 似乎只是 Ada 实现的(不确定)
- 根据http://polyorb.ow2.org/,Polyorb 的最后一次实现是在 2006 年。
- 有人认为 Corba 可能不够简单,不足以证明其实现简单应用程序的复杂性是合理的
- DSS/Opensplice 似乎只是 C/C++ 实现的,因此应该完成 Ada 绑定(bind)。实现起来似乎也不是很简单。
我个人喜欢COM,但由于迁移,我宁愿采用套接字选项,因为它简单,而且接口(interface)架构可以很容易实现。
那么,你觉得呢?您能否对这些技术发表评论,甚至提出其他更多技术建议?
非常感谢。
最佳答案
您选择的一个重要因素是您正在重新设计的系统的规模和复杂性。它是一个具有大量复杂消息的广泛分布式系统吗?它是一个相对较小的系统,只有少量普通的消息交换吗?
对于小型系统,我过去只是使用自己的基于套接字的通信模块。不过现在,我更倾向于 ZeroMQ (无经纪)或 STOMP (基于文本)。并且有一些 Ada 支持这些,zeromq-Ada和 TOMI_4_Ada (两者都支持)。
虽然这些处理分发机制,但您仍然需要将消息序列化为可传输形式。
CORBA/PolyORB 和 DDS 解决方案相当重量级,但却是完整的解决方案。如果您不害怕 IDL 和管理代理,它们可以在大型分布式系统中表现出色。是的,可能需要构建一些 Ada 绑定(bind),但如果您可以获得 C 头文件或 C API 来绑定(bind),那么如果您专注于绑定(bind)所需的函数和数据结构,通常也不会太糟糕。不要创建全面的绑定(bind),而是对您不关心其内部内容的结构和参数自由使用不透明和空指针( void_ptr 、 opaque_structure_def_ptr )。
关于sockets - Ada/C/++ 分布式应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7839267/