代码之家  ›  专栏  ›  技术社区  ›  Nestor

为什么命名管道是本地的?

  •  0
  • Nestor  · 技术社区  · 16 年前

    我记得在两台机器之间使用命名管道进行通信(回到WindowsNT)。 为什么现在我看到命名管道只用于同一台机器中的进程间通信?(在Vista和Windows 7中)

    2 回复  |  直到 16 年前
        1
  •  4
  •   marc_s MisterSmith    16 年前

    作为操作系统基础结构的命名管道完全可用于机器之间的通信-请参阅 MSDN docs on Named Pipes .

    命名管道可用于提供 进程之间的通信 同一计算机 或在进程之间打开 网络上的不同计算机。 如果服务器服务正在运行, 全部的 可以远程访问命名管道。 如果要使用命名管道 仅本地,拒绝访问NT 授权\网络或切换到本地 RPC。

    不过,我想您可能在谈论WCF绑定“netnamedpipe”,它实际上是在同一台机器上进行的通信。为什么是这样的情况,是一些你会问的WCF设计团队-我没有任何关于这方面的信息。

    但是正如StephenC正确地说的那样——如果您需要机器到机器的通信(在WCF中),那么使用nettcpbinding来代替——这两者在功能、速度和功能集上相当相似。

    看到这个 article on the support added in .NET 3.5 用于命名管道。

    马克

        2
  •  0
  •   Stephen C    16 年前

    因为如果它们不是本地的,就称为套接字。

    编辑:实际上,这是一个相当轻率的、以Unix为中心的答案。在UNIX上,命名管道仅用于本地通信。相反,套接字可以用于本地和非本地通信,并且可以使用各种传输协议。另一个区别是你找到它们的方式。命名管道通常位于文件系统名称空间中。套接字(或者更准确地说,套接字端点)由某种类型的网络地址标识,这种地址通常在某种名称服务器/服务中查找。