COM的跨平台替代方案

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

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

要求:

  1. 跨平台
  2. 快速
  3. 适用于C ++
  4. 支持跨进程编组

让我详细说明这些要求:

跨平台

基本上,我需要它在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。 那个时间甚至不能完全提供给我,因为其他组件需要在那个时间处理,而我的软件本身就包含了另一个需要在那个时间处理的软件。 这就是为什么在进程和跨进程编组都需要非常快的原因。

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

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

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

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

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

一个明确的选择是XPCOM http://en.wikipedia.org/wiki/XPCOM – 缺少MSVC并不意味着不跨平台。

祝好运

Qt不应该成为另类吗?

http://qt.io

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

那是恕我直言。

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

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

检查一下性能数字:

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

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

看看D-Bus (是的,也适用于windows ),这是各种组件框架(CORBA,Gnome Bonobo,KDE的DCOM)的现代精神inheritance人。

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

看看AF架构 :

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

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

我想你应该看看VortexLibrary 。

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

Vortex还包括一个带有IDL编译器的XML-RPC配置文件的实现,它应该为编组提供足够的基础……最好的是你以后可以提供更具体的协议。 session,进行二进制传输而不受XML-RPC的限制。

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

干杯!