我遇到了使用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