sockets - Ada/C/++ 分布式应用程序

标签 sockets com ada corba dss

我正在尝试评估一些技术,用于实现一些 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-AdaTOMI_4_Ada (两者都支持)。

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

CORBA/PolyORB 和 DDS 解决方案相当重量级,但却是完整的解决方案。如果您不害怕 IDL 和管理代理,它们可以在大型分布式系统中表现出色。是的,可能需要构建一些 Ada 绑定(bind),但如果您可以获得 C 头文件或 C API 来绑定(bind),那么如果您专注于绑定(bind)所需的函数和数据结构,通常也不会太糟糕。不要创建全面的绑定(bind),而是对您不关心其内部内容的结构和参数自由使用不透明和空指针( void_ptropaque_structure_def_ptr )。

关于sockets - Ada/C/++ 分布式应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7839267/

相关文章:

c++ - Windows-7/64 位上的免注册 COM 对象

class - 在其他类中使用类/记录(此上下文中需要子类型标记)

ada - 在 Ada 中使用私有(private)类型创建私有(private) int

c - 如何检查给定的IP地址是否可以在C程序中访问

java - 将输入流重定向到套接字的输出流

c# - 为什么我的 COM 对象不显示组件服务中的方法?

Delphi 2009 COM/ActiveX 类型库支持稳定性

language-features - 忽略 Ada 函数返回值

java - 连接到 Tomcat 上的套接字?

主线程中的 Python 套接字接受阻止退出