我遇到了使用Windows命名管道的低性能问题。随着网络延迟增加,吞吐量迅速下降。每秒发送的消息和往返时间之间大致呈线性关系。在服务器发送下一条消息之前,客户端似乎必须确认每条消息。这导致性能很差,我只能通过一个RTT为200毫秒的链路每秒发送5个(〜100字节)消息。Windows上的低吞吐量通过WAN命名的管道
管道是异步的,使用多个重叠写操作(在客户端有多个重叠读取),但这不会提高吞吐量。是否可以通过命名管道并行发送消息?管道是使用PIPE_TYPE_MESSAGE创建的,PIPE_READMODE_BYTE会更好吗?有没有其他方法可以提高性能?
这是一个已部署的解决方案,所以我不能简单地用套接字连接替换管道(我读过Windows命名管道不推荐用于WAN,我想知道这是否为什么)。我会很感激这件事的任何帮助。
重叠I/O只意味着WriteFile立即将控制权返回给您的应用程序。它不会影响实际的广域网流量。 – MSalters 2010-04-26 15:41:11
是的,我明白这一点,谢谢。然而,我很惊讶地发现,在管道发送任何更多数据之前,每个写入事件都需要来自客户端的确认,并且我试图找到解决办法。 – MichaelB76 2010-04-27 11:19:40