我可以拥有多少个命名管道?
Posted
技术标签:
【中文标题】我可以拥有多少个命名管道?【英文标题】:How many named pipes can I have? 【发布时间】:2013-08-02 13:03:45 【问题描述】:没有人正确回答我或使用官方资源来回答这个问题。 我有一个服务器和许多模块。 每个模块将创建一个命名管道,服务器将为每个模块创建一个命名管道。 我需要知道我可以同时拥有多少个命名管道。
我不打算将它们像 10 个客户端连接到 1 个服务器,不。 我想始终将 1 个客户端连接到 1 个服务器,但是我可以制作多少个这样的管道?
请注意,我在 C# 中使用 WCF。
【问题讨论】:
【参考方案1】:在 Windows 中创建的每个命名管道都使用一些系统资源,这意味着可以创建的管道数量存在实际限制。 See:
每次创建命名管道时,系统都会创建入站 和/或使用非分页池的出站缓冲区,这是物理的 内核使用的内存。管道实例的数量(以及 您可以创建的对象(例如线程和进程)是有限的 通过可用的非分页池。
确切的数字限制取决于您的系统,但如果不是数千,它可能至少在数百个数量级。
当使用 WCF 命名管道绑定创建管道时,由于此绑定发布有关正在使用的管道的元数据的方式,您只能为每个基地址创建一个管道。因此,最好使用绝对 URI 地址而不是基地址 + 相对地址来定义 WCF 端点。如果您这样做,并设计一个合理的方案来为每个端点创建一个唯一的绝对地址,那么据我所知,您可以创建的 WCF 端点的数量没有固定限制。
任何特定系统的实际实际限制只能凭经验发现。如果您的目标是拥有几十个端点,我猜您将能够轻松地实现这一目标。如果您希望有数千个并发操作,您可以发挥系统资源的实际限制。只有测试才能确定这一点。
【讨论】:
我现在将使用 12,但如果我用更多模块扩展我的程序,也许我会在 20 左右,我不希望这成为我可扩展性的限制【参考方案2】:首先我想告诉你,你应该正确地解释这个问题,否则这里没有人会帮助你。解释您遇到的问题在哪里,并向我们展示一些代码。
从您的解释中,我发现您想要的是这样的: Number of Clients that can connect to a Named Pipe.
【讨论】:
这不是我问的。我不想知道有多少客户端可以连接到命名管道。我需要知道我可以创建多少个命名管道:DuplexChannelFactory<IServiceHandler> pipeFactory = pipeFactory = new DuplexChannelFactory<IServiceHandler>( myCallbacks, "ClientEndpointInClient");
以上是关于我可以拥有多少个命名管道?的主要内容,如果未能解决你的问题,请参考以下文章