我在使用 Windows 命名管道时遇到性能低下的问题。随着网络延迟的增加,吞吐量迅速下降。每秒发送的消息与往返时间之间大致呈线性关系。似乎客户端必须在服务器发送下一条消息之前确认每条消息。这会导致性能非常差,我每秒只能通过 RTT 为 200 毫秒的链接发送 5 条(~100 字节)消息。
管道是异步的,使用多个重叠的写入操作(以及客户端的多个重叠读取),但这并没有提高吞吐量。是否可以通过命名管道并行发送消息?管道是使用 PIPE_TYPE_MESSAGE 创建的,PIPE_READMODE_BYTE 会更好吗?有没有其他方法可以提高性能?
这是一个已部署的解决方案,所以我不能简单地用套接字连接替换管道(我读过不建议在 WAN 上使用 Windows 命名管道,我想知道这是否是原因).如果您能就此事提供任何帮助,我将不胜感激。
最佳答案
我们发现命名管道有 poor performance from Windows XP向前。
我没有适合你的解决方案。但我同意命名管道从 XP 开始就无用的概念。我们因此彻底改变了我们的软件(在 IPC 方面)。
您的通信是否分解为单独的 DLL?也许您可以用一个看起来相同但行为不同的接口(interface)替换 DLL?
关于c++ - WAN 上 Windows 命名管道的低吞吐量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2713931/