COM的跨平台替代方案

时间:2009-06-06 23:53:19

标签: c++ c com cross-platform corba

我一直迷恋于基于组件的编程(无论是COM,另一个系统,还是只使用普通C ++中的范例)。它需要一点习惯,如果一个人习惯于“传统的”OOP模型,但它是值得的。它使我的代码更易于维护和扩展。

我目前正在研究的项目是使用范例,但没有设置系统。但是,我真的很想找到一些可以满足以下要求的系统。从我现在的状态切换到新系统需要花费一些时间,但是我稍后会节省多倍的时间。

要求:

  1. 跨平台
  2. 快速
  3. 适用于C ++
  4. 支持跨进程编组
  5. 让我详细说明这些要求:

    跨平台

    基本上,我需要它才能在Windows和Mac上运行。 Linux会很好,但绝不是必不可少的。此外,它确实需要满足所有平台的其他要求。有一个适用于Mac的COM,这将是理想的,但它不支持要求4.此外,它必须支持GCC和MSVC。

    快速

    这是CORBA不幸丢失的地方,尽管它满足了其他三个要求。进程内方法调用需要尽可能快(理想情况下,如COM),因为某些例程也可能从音频中断调用。

    适用于C ++

    ......我想这一点大多是显而易见的。我不介意不使用C ++类来实现组件,虽然这将定义有用,并且替代方案必须仍然易于使用,特别是因为最终我打算发布第三方扩展的API。

    支持跨流程编组

    我的意思是至少能够序列化呼叫。如果这是通过IDL生成的代码完成的,那对我来说完全没问题,而且我也不介意实现跨进程通信本身。

    COM会很棒,但它不能完全满足要求1。 CORBA也会很棒,但它不符合要求2(即使有最快的ORB)。 XPCOM可能不符合要求2,并且不适用于MSVC,因此不符合要求1.

    还有什么想法吗?我的下一步是使用protobufs或类似的东西来推销自己,但我当然希望避免这种情况。

    更新

    详细说明 - 此上下文中的音频中断可低至2-3ms。那个时间甚至不能完全提供给我,因为其他组件需要在那个时间处理,而我的软件本身就包含了另一个需要在那个时间处理的软件。这就是为什么在进程和跨进程编组都需要非常快的原因。

9 个答案:

答案 0 :(得分:3)

为了获得最大的广度,我只使用网络服务。面向服务的方法非常接近面向组件的方法,因为只暴露服务契约(接口),客户不需要知道服务内部工作的细节。

答案 1 :(得分:3)

来自ZeroC http://www.zeroc.com/的ICE是另一种选择。

对于那些CORBA老人来说,Michi Henning是当时的大师之一。他现在在ZeroC。它是一个开源的跨平台,包括所有目标(包括Linux),系统。

C ++只是其中一种语言,ICE的C ++绑定明显优于CORBA C ++绑定。

答案 2 :(得分:2)

CORBA肯定是一个答案 - 你应该在你根据速度解雇它之前测试它。

明确的替代方案是XPCOM http://en.wikipedia.org/wiki/XPCOM - 缺少MSVC并不意味着不跨平台。

祝你好运

答案 3 :(得分:2)

不应该作为替代品吗?

http://qt.io

AFAIKT你至少可以使用它: Windows | Mac | Linux / X11 | Solaris |嵌入式Linux | Windows Embedded | Green Hills Software INTEGRITY | QNX | VxWorks的

那是恕我直言。

答案 4 :(得分:1)

为什么你认为CORBA不够快?你最近测量过了吗?

CORBA的现代实现可以在不到150个usecs中进行远程调用。低于2毫秒的预算。 CORBA的现代实现可以优化进程内调用基本上两个虚函数调用,但这通常要求应用程序放弃一些功能(例如拦截器)。即使是在最坏情况下的全功能本地调用也是几个查找+一些虚拟电话,我没有方便的数字,但我确信它低于50 usecs。

检查一下性能数字:

http://www.dre.vanderbilt.edu/Stats/performance.shtml

答案 5 :(得分:1)

你说CORBA会很棒。我只能假设你从未使用它。这是一个sprogramming nightmnare,并没有提供它声称的便携性。我只会在现有应用程序已实现它的情况下使用它。但是,我不会因为性能原因而放弃它 - 我几乎没有遇到任何我使用过的CORBA实现的性能问题。

答案 6 :(得分:1)

看看D-Bus(是的,windows too),这是各种组件框架的现代精神继承人(CORBA,Gnome Bonobo,KDE的DCOM)。

如果跨进程编组证明是性能问题,请将繁重的工作移动到共享内存(boost.interprocess将有助于保持跨平台)。

答案 7 :(得分:0)

查看AF Architecture

“Af-Arch是一套完整的库和工具,可以开发专门用于解决业务应用问题的分布式系统。”

我知道它适用于linux和windows。我也知道它有一个非常快的C API和C#绑定。

答案 8 :(得分:0)

我认为你应该看看VortexLibrary

这是一个完整的BEEP实现,为开发任何对等应用程序协议提供了良好的基础。它已经集成了身份验证(使用SASL)和安全连接(使用TLS),两种选项。

Vortex还包含一个带有IDL编译器的XML-RPC配置文件的实现,它可以为编组提供足够的基础......最好的是,您可以在以后提供更具体的协议。在同一会话中,进行二进制传输而不受XML-RPC的限制。

它用C编程,但也适用于c ++。目前它正在运行,回归测试确保其在Linux,Windows和MAC下的功能。

干杯!