簡體   English   中英

命名管道客戶端可以寫入多個實例嗎?

[英]Can a named-pipe client write to multiple instances?

在創建命名管道的多個實例(使用CreateNamedPipe())之后,我使用CreateFile()形成管道客戶端。
當客戶端將消息寫入管道時,只有一個服務器實例可以獲取它。

客戶端是否可以將消息寫入所有實例?

據我所知,當客戶端連接到命名管道的實例時,操作系統選擇與之建立連接的服務器實例的方式尚未公開。 但是,從經驗上看,它似乎是輪流進行的。

如果您准備依靠未記錄的行為(可能隨Service Pack和QFE補丁而改變),則客戶端可以繼續關閉其管道句柄並再次調用CreateFile以獲取新的-每次它將附加到管道的新服務器實例時, 。 但是,這樣做存在一個問題,即客戶端將不知道何時停止。 我想您可以發明一種機制,其中涉及來自服務器的響應來打破循環,但這遠不能令人滿意。 這不是命名管道的設計目的。

管道的多個服務器實例的真正目的是使管道服務器能夠同時處理多個客戶端。 通常,同一服務器進程管理所有實例。

您真的想扭轉一切:您認為客戶端應該是服務器,並應該創建和管理管道。 然后,需要通知的進程將作為命名管道的客戶端進行連接。 如果可以選擇的話,這種模式可以很容易地使用帶有雙工協定和NetNamedPipeBinding的WCF來實現。

不,管道有兩個末端。 循環通過管道。 郵槽支持廣播,但不能保證傳遞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM