应用之间的通信

时间:2011-03-03 13:37:02

标签: c++ windows sockets com activex

我有3个选择:套接字,activeX,com,以便在一台计算机上的应用程序之间进行通信。哪个更快?

8 个答案:

答案 0 :(得分:11)

只要在一台机器上运行,进程间通信就会受到总线带宽的基本限制。内存到内存的副本,无论是在TCP / IP堆栈中完成,命名管道支持代码还是共享内存。这使他们都同样有效。

但有一个细节很重要,即传输的数据量以及为完成工作而通过的软件层数。当数据量很大时,内存总线带宽仅限制。对于像COM这样的远程过程调用协议,情况不一定如此。只需要序列化函数调用的参数,如果不传递数组,则只能是少数几个字节。现在开销很重要,当你使用像COM这样的高级协议时,它的数量相当大。

使用套接字的明显缺点是你必须自己编写所有的de / serialization代码。如果具有组件的协议不简单,则无关紧要。为了方便而交易您的工作时间是典型的选择,只有您可以做到。

答案 1 :(得分:9)

好吧,想一想 - 套接字是最低级别的,COM是使用套接字,ActiveX是使用COM。哪一个更快?当然,插座。但这只是在询问程序执行速度和数据传输速率时。但是,如果您不知道自己在做什么,使用套接字开发程序会更加困难。更不用说你可能会提出一些比COM差的糟糕实现。此外,使用ActiveX时,套接字可以获得的可重用组件不多,更不用说如果要与MS Office通信,则必须使用COM。

答案 2 :(得分:2)

您没有详细说明您正在尝试做什么或需要做出哪些考虑。例如,“快速”是指高带宽?低延迟?您是否有可能需要稍后在计算机之间进行通信?等

也就是说,ActiveX是COM的一个特例(introduction to activeX)。如果您已经熟悉COM或ActiveX,并且取决于您正在尝试做什么,您可能能够编写相对较少的代码,因为MS开发工具可以为您处理大量代码。

如果您对它不熟悉,那么这是一项相当复杂的技术,可能很难处理。因此,如果您只是尝试实现一些基本的进程间通信,那么使用套接字可能更容易。另一方面,这可能需要您进行更低级别的工作。

答案 3 :(得分:2)

我还会将IPC委托给一个框架,例如ACE(自适应通信框架)。 例如,Ace的实现是稳定的,它是跨平台的。

答案 4 :(得分:1)

您可以使用共享内存吗?甚至Oracle也在其产品中使用共享内存。共享内存很快。

答案 5 :(得分:1)

实际上哪个更快可能并不重要。如果是这样,那么选择最方便开发和维护的方法。即使您无法保存任何可测量的运行时间,也可以节省您自己的时间。

答案 6 :(得分:1)

ActiveX或多或少是COM上的一个花哨的营销名称(ActiveX组件/控件是一个只支持IUnknown接口的对象),因此您的选择实际上取决于COM与Socket。

对于跨进程通信,可以使用套接字更快地编写内容...如果你是一个好的套接字和Windows程序员,因为你将独立,因为套接字基本上什么都不做来帮助你。这并不意味着COM速度不快或性能不好,但理论上你总是能比开箱即用的系统做得更好,但前提是你掌握了整个系统。

最后,如果您需要与第三方产品或Windows以外的其他平台进行通信,套接字更便于携带。

答案 7 :(得分:0)

很难说哪个更快,但使用COM肯定是您列出的最灵活的选择。除非你喜欢通过字节流进行groveling。

相关问题