在Windows上进行进程间通信,命名管道与UDP的比较

4

为什么在本地Windows机器上,使用命名管道进行进程间通信(IPC)比使用UDP更好?或者在某些情况下,UDP可能更好?


1
TCP很好,而不可靠的传输机制对于IPC毫无用处。 - Hans Passant
请问,您能解释一下您的意思吗? - MajesticRa
你先解释一下为什么要使用UDP。 - Hans Passant
很可能是因为那些应该集成到我们系统中的系统开发人员知道什么是UDP,但对命名管道缺乏经验。因此,我必须说服他们学习一些新的东西。 - MajesticRa
@MajesticRa 那就用TCP吧 - 很有可能系统的开发人员比UDP更熟悉TCP。 - Eugene Mayevski 'Callback
不是这样的。我的意思是他们正在一台机器上使用UDP进行IPC...我只是试图说服他们有更好的方法来解决这个问题...我知道一些论点,但我决定在这里写下这个问题,以了解不同的意见、更好的论点,或者甚至听到我错误地认为UDP不是在同一Windows机器上进程间交互的完美方式。 - MajesticRa
1个回答

6

即使在本地主机上,UDP数据包也可能会丢失。此外,由于UDP是基于数据报的,并且没有保证传递,因此很难传输较大的数据块。最后,在本地主机上,浏览器有时会阻止UDP。一般来说,UDP通常不考虑用于单台计算机间的进程间通信。

在Windows上,我建议使用内存映射文件+同步原语作为最快且可能最简单的方法。当您设法让命名管道正常工作时,命名管道通常也能很好地工作,但我在这里看到了很多关于如何使命名管道正常工作的问题(而我还没有看到过任何关于MMF的抱怨)。

我们有一个产品MsgConnect,它提供基于套接字、UDP和MMF的传输方式,适用于本地或跨网络的IPC,因此我对这个主题有实际经验。曾经考虑过支持命名管道,但最终被其他机制所取代。


命名管道是简单可靠的,相比内存映射文件在进程间通信方面更加灵活。命名管道的功能已经集成在.NET环境中,易于使用。通过使用命名管道,您可以将服务器或客户端移动到网络上的任何其他计算机。而如果使用内存映射文件,则需要管理同步操作,如果决定将客户端或服务器移动到另一台计算机,则必须从头开始重写IPC代码。 - Neal Davis
@NealDavis 命名管道从来不是多主机通信的选择。命名管道到远程的速度非常慢。 - robert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接