對於消息模式管道,Win32以前的消息大小限制爲64K,如知識庫文章Q119218 PRB: Named Pipe Write() Limited to 64K的殘留部分所見。 「適用於」部分僅列出「Microsoft Win32應用程序編程接口」,文章相當老舊;沒有跡象表明它是否也適用於Windows 7等合理的最新版本。有沒有關於這個問題的可靠的最新信息?Win32命名管道和消息大小限制 - 舊的64K限制是否仍適用?
目前的在線文檔僅包含在非指定範圍模糊不清的提示,就像對CreateNamedPipe()函數的文檔在這個美麗的字眼:
輸入和輸出緩衝尺寸諮詢。爲命名管道的每端保留的實際緩衝區大小可以是系統默認值,系統最小值或最大值,也可以是指定大小四捨五入到下一個分配邊界。
沒有跡象表明'系統最大值'可能是什麼,或者如何查詢其值。
甲64K限制的文檔中重新出現了TransactNamedPipe():命名管道交易
的最大保證的大小爲64千字節。在一些有限的情況下,根據參與交易的操作系統版本和動態網絡條件,超過64千字節的交易是可能的。但是,不能保證64千字節以上的事務會成功。
但是,很可能該限制僅適用於TransactNamedPipe()
意義上的命名管道「事務」即寫後跟讀,全部包裝在單個系統調用和/或網絡事務中。限制可能與SMB有關,因此不適用於本地管道。有沒有這方面的任何硬信息?
消息模式管道將非常適合當前的項目,服務器進程獲得請求數據包並提供單個響應數據包,調度程序是Apache中的一個簡單的多線程存根(類似於mod_fcgid) 。字節模式管道需要一些額外的組幀,這使得消息模式管道看起來更簡單,因此更受歡迎。但是,不可能將請求和響應大小限制爲64K;因此這個問題。
謝謝,我也這麼想。我挖出一些舊CD,發現KB文章Q119218創建於1994-08-10;在1996年12月16日至2000年10月18日之間的修訂版適用於新臺幣3.1至4.0。我的最後一張CD是2001年7月,這是一個小的情況指標,Win2K和XP(當時仍稱爲惠斯勒)沒有受到影響。 – DarthGizka