【问题标题】:Sockets vs named pipes for local IPC on Windows?Windows上本地IPC的套接字与命名管道?
【发布时间】:2010-12-17 07:03:10
【问题描述】:

是否有任何理由偏爱命名管道而不是本地 IPC(都使用 win-api)、effortency-wize、resource-wize 或其他方式的套接字,因为两者的行为非常相似(并且可能被类似的接口抽象出来无论如何),在一个可能已经将套接字用于网络目的的应用程序中?

我至少可以说出寻址问题:套接字的端口号与管道的文件名。此外,命名管道 (AFAIK) 不会警告防火墙(阻止/解除阻止对话框),尽管被阻止的应用程序仍然可以通过本地套接字进行通信。还有什么要考虑的吗?

在使用套接字的情况下,在本地使用套接字时是否有推荐的winsock设置/标志?

【问题讨论】:

    标签: winapi sockets ipc named-pipes


    【解决方案1】:

    一些细微的差别:

    如果您没有正常工作的适配器,套接字将无法用于本地 IPC。没有正常工作的适配器的 PC 有多常见?好吧,当有人试图在没有插入网络或电源的笔记本电脑上向客户演示我们的软件时(因此操作系统禁用网卡以节省电力)并且无线适配器被禁用(因为笔记本电脑用户没有使用无线)。您可以通过安装环回适配器来解决此问题,但这并不理想。

    防火墙软件可能会导致建立 TCP/IP 连接出现问题。这不应该是本地 IPC 的问题,但我不相信。 Named pipes can have firewalls too.

    由于创建命名管道或创建命名管道的新实例所需的权限,您可能会遇到问题。例如,我正在使用相同的命名管道运行多个服务器(可能不是一个好主意,但这是为了测试)并且在 CreateNamedPipe 中有些失败,因为创建管道的第一台服务器在管理员模式下运行(因为它是从管理员模式下的 Visual Studio),而其余的都是从具有正常 UAC 级别的命令行启动的。

    虽然 Rubens 提到的文章主要是关于网络上的 IPC,但它确实指出“本地命名管道在内核模式下运行并且非常快”。

    【讨论】:

    • Windows PC 始终安装虚拟环回接口。您无需在 PC 中安装网络适配器或驱动程序即可使用 Windows 套接字。使用 IP 地址 127.0.0.1 来寻址您的本地进程。
    【解决方案2】:

    您可能要考虑的另一个解决方案是命名共享内存区域。这有点工作,因为你必须自己建立一个流量控制协议,但我过去成功地使用了这个,速度是最重要的。

    【讨论】:

      猜你喜欢
      • 2012-06-08
      • 2010-11-17
      • 2011-09-23
      • 2021-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-05
      • 1970-01-01
      相关资源
      最近更新 更多