【发布时间】:2016-06-11 02:38:06
【问题描述】:
Win7、x64、C++、Win32 API、控制台应用、Visual Studio 社区 2015
我已经搜索了有关命名管道的所有 SO 问题,但找不到我需要的答案。
我正在编写一个服务器以通过命名管道以一种方式将数据广播到同一台机器上的多个相同客户端。服务器和每个客户端都在自己的进程 (.exe) 中。当所有客户端以某种方式向服务器发回他们准备就绪的信号时(通过命名事件或其他机制)发送数据。
documentation 表示多个客户端可以连接到单个管道实例,但随后继续谈论multiple instances。
我有几个关于服务器端管道的问题:
- 对于客户端数量少、吞吐量低的情况,最简单的是:1个线程,1个管道实例; 1个线程和多个管道实例;多个线程和每个线程一个实例?
- 如果单个线程在同一管道实例上多次执行
ConnectNamedPipe,这是否意味着将单个WriteFile广播到已连接到该特定管道实例的所有客户端? - 如果多个客户端可以连接到管道的特定实例,是否会阻止从服务器端写入该管道,直到所有客户端都读取了上一条消息?
- 做一对多的情况不常见吗?为什么?
【问题讨论】:
-
文档说多个客户端可以连接到单个管道实例 - 不,您误读和/或误解了它。每个实例一次只能支持一个客户端。 (为了回答您的问题,对于少量客户端和低吞吐量,每个客户端使用一个线程是最简单的。)
标签: windows multithreading winapi