繁体   English   中英

应用之间的通信

[英]Communication between applications

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

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

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

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

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

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

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

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

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

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

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

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

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

最后,如果您需要与第三方产品或Windows之外的其他平台进行通信,则套接字更具可移植性。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM