2011-10-20 39 views
6

我想评估一些技术,用于实现一些Ada模块与一些C++/OpenGL模块之间的通信过程。有一个(Windows XP)Ada应用程序使用COM与C++应用程序通信,但我打算将COM切换为新技术。提出了一些建议,如直接套接字,DSA,Polyorb,Corba和DSS/Opensplice。Ada/C/++分布式应用程序

  • DSA似乎只是阿达-implemented(不知道)
  • Polyorb都有其2006年最后落实,根据http://polyorb.ow2.org/
  • 的Corba有人argumented,这可能是不够的简单证明其复杂性实现简单的应用程序
  • DSS/Opensplice似乎只是C/C++实现的,所以应该完成Ada绑定。它也似乎不是很容易实施。

就我个人而言,我喜欢COM,但由于迁移,我宁愿采用套接字选项,由于其简单,接口架构可以很容易地实现。

那么,你觉得呢?您能否对这些技术发表评论,甚至建议其他更多?

非常感谢。

+4

在您陷入思考套接字“简单”的陷阱之前,请考虑您必须在裸套接字层上构建的东西的数量,以支持高性能,灵活且可扩展的IPC机制。有关更多详细信息,请参阅我的另一个问题的这个答案:http://stackoverflow.com/questions/6067538/restful-web-services-vs-socket-programming-for-a-data-intensive-application/6067635#6067635 –

+1

Polyorb似乎由AdaCore积极维护,并有相当新的更新。你可以通过http://libre2.adacore.com//viewvc/trunk/polyorb/ –

+1

来浏览版本库,CORBA应该能够做到,polyorb是一个选项,你也可以开发为现有oRB的语言绑定,我们可以示例已经为TAO创建了一个Ruby绑定,一个用于TAO的新的C++ 11绑定和一个用于JacORB的JRuby绑定。另请查看http://www.orbzone.org。如果您想使用DDS,请考虑为OpenDDS创建Ada绑定(请参阅http://www.opendds.org/) –

回答

4

您选择的一个重要因素是您正在重新设计的系统的规模和复杂性。它是一个分布广泛的系统,有很多复杂的信息?它是一个相对较小的系统,只有少量的世俗信息交换?

对于我以前只使用自己的基于套接字的通信模块的小型系统。不过,现在我更倾向于ZeroMQ(无券商)或STOMP(基于文本)。还有一些Ada支持这些,zeromq-AdaTOMI_4_Ada(同时支持)。

虽然这些处理分配机制,你仍然需要处理的消息序列化为可移动的形式。

CORBA/PolyORB和DDS解决方案相当重量级,但却是完整的解决方案。如果您不担心IDL和管理经纪人,那么他们可以为大型分布式系统做好。是的,可能需要构建一些Ada绑定,但如果您可以获得C头文件或C API来绑定,那么如果您只关注仅需绑定所需的函数和数据结构,那么通常不会太糟糕。不是创建一个全面的绑定,而是自由地使用不透明和空洞的指针(void_ptr,opaque_structure_def_ptr)来表示您不关心的内部内容的结构和参数。

+0

我查看了zeromq-Ada,这听起来很有趣。代码已打开,但如果需要的话,可以提供支持。谢谢Marc。 – Rego

1

你的列表的另一个选项应该是使用Ada的distributed programming support,并编写C/C++包装来将你的C++程序连接到它。

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

+0

我会检查附录E.我想我的编译器支持它。感谢TED。 – Rego

+0

实际上,当我最后一次检查时(不可否认,不久前),很少有Ada编译器支持该特定附件。但是,如果您碰巧遇到了这样的情况,那么您可能就会开展业务。 –

3

我们打算到COM切换到新的(支载)技术,因为COM是不是更受微软

谁告诉你的COM是不再支持是完全无能的支持。虽然COM在过去几十年中经历了许多名称变更(OLE,COM,OLE自动化,DCOM,COM +,ActiveX,WinRT)和扩展,但它是MS平台最重要的技术:过去,现在和将来。 The .NET runtime uses COM extensively。大多数的Win32 API都是用COM编写的,而不是的部分将在Win8中,因为WinRT components are COM objects

+0

那么,刚刚发现为什么安装SP3 Win XP后,我们框架中的几个COM应用程序停止工作。如果我们没有迁移到一个新的基于COM的.NET,我们的应用程序的几个功能就会受到影响。对于安全/关键的sw,通信协议总是在升级(Windows频繁)的情况下改变是不可接受的,那么我们必须尝试一种更稳定的方法。另外,Ada还有非常好的COM绑定的GNATCOM,它现在还没有开发中。我赞赏你的意见,并同意COM有成功者,但你有什么建议吗?谢谢 – Rego

+0

@Rego:这些不是COM的继承者,他们是COM。或者使用COM。任何遵循COM规则的代码仍然有效,如果某些应用程序停止在XP SP3上工作,我只能认为(1)他们使用了某些因安全原因被删除的特定组件,或者(2)他们依赖无证行为代替遵循成文规则。 –

+0

@Rego:另外,产品不再被开发的原因有多种。它可能被放弃,或者它可能是稳定的。这听起来像GNATCOM是稳定的。 –

2

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

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

如果你去插座路线,比我建议ZeroMQ作为“超级套路”。

+0

AMQP绑定“adaqpid”是非常小而脆弱的,IIRC,我最终放弃了试图扩展其功能。此外,它是一个半分类的归档文件,还包括编辑器创建的最新备份文件版本(由多个文件名中的'〜'后缀指示),并且不包括*任何* README或编译指南。在上面链接的TOMI_4_Ada中,我根据OpenAMQ的WireAPI做了自己的部分AMQP绑定。 –