Re: [問題] IPC的選擇
看板C_and_CPP (C/C++)作者purpose (purpose)時間13年前 (2013/01/26 00:03)推噓5(5推 0噓 13→)留言18則, 3人參與討論串6/8 (看更多)
※ 引述《QQ29 (我愛阿蓉)》之銘言:
: 再爬文 關於windows IPC
: 也是想問IPC問題
: 有貼文章在programming版....
: 想問一下有人知道RPC嗎?
: RPC我有自己用過
: 但我就很好奇他到底是不是memory mapping
: pipe跟file mapping似乎都是memory共享
: 但RPC我一直都查不到...
: 有辦法自己證實這些疑惑嗎...
: 還有這三種IPC到底是該怎麼選擇呢...感覺用法都類似能力也差不多..
: thanks
根據這篇文章 "How RPC Works" 所述:
http://technet.microsoft.com/en-us/library/cc738291.aspx
If the server is located on the same host as the client, the runtime library
can use the Local RPC (LRPC) function and pass the RPC request to the Windows
kernel for transport to the server.
...
RPC can use other IPC mechanisms, such as named pipes and Winsock, to accomplish the
transport. The other IPC mechanisms allow RPC more flexibility in the way in
which it completes its communications tasks.
確定有用到 named pipe,但是不是只用這個就很難說。
那麼 named pipe 底層又是怎麼實作?稍微 google 了一下,查不太到...
不過這不重要,反正你也只是想知道該怎麼選擇,底層就不太需要管了。
RPC 有兩大明顯的特徵,第一是跨網路,第二是函數呼叫。
如果你準備要通訊的兩個行程,是不同電腦的時候,
那當然不必考慮 File Mapping,這時候可以用 RPC 或 named pipe。
named pipe 上 Internet 我沒用過,看網路上的說法,不太好用的樣子:
How to use named pipes over network? site:stackoverflow.com
至少大家都同樣區域網路內時,還是能讓不同電腦方便的溝通。
這兩者都是 client-server 架構,如果作為伺服端的行程,確定只是提供
一些函數讓客戶端呼叫時,這形式擺明就是要用 RPC 了。比如遠端控制軟體,
被控制端可以提供關機函數、螢幕錄影函數、鍵盤記錄函數...
named pipe 優點就是比較靈活而已,可以選定用同步、非同步的方式來存取 pipename。
同步的時候,客戶端用 ReadFile 去讀取 pipename,裡面沒資料的時候就鎖住等待,
等讀到東西才會結束 ReadFile 函數。
而使用 memory mapping 時,他直接往記憶體讀資料,不管讀到什麼都往下執行,
預設就是非同步在存取,只能額外寫程式碼才能達到 named pipe 的效果。
http://twimgs.com/ddj/images/article/2011/1111/pipetable.gif

上面這張圖是各大 IPC 技術優缺點比較表
圖來自文章 "Using Named Pipes to Connect a GUI to a Console App in Windows":
http://tinyurl.com/aqouq4j
作者說他寫鑑識軟體,實際跑的是 console 程式,但還有一個方便操縱的 GUI 前端。
然後因為 console 端每次都要運算很久,所以需要讓 GUI 前端有 "進度條" 的畫面,
考量到需要同步通訊,又需要在 LAN 的不同電腦運行,所以他採用 named pipe...
補充:
named pipe 範例:http://tinyurl.com/bg2x5er
RPC 範例: http://tinyurl.com/a46eacj
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 124.8.138.160
推
01/26 00:06, , 1F
01/26 00:06, 1F
推
01/26 00:27, , 2F
01/26 00:27, 2F
→
01/26 00:28, , 3F
01/26 00:28, 3F
→
01/26 00:29, , 4F
01/26 00:29, 4F
→
01/26 00:30, , 5F
01/26 00:30, 5F
→
01/26 00:30, , 6F
01/26 00:30, 6F
可以用 named pipe 後, 讓行程停住用 VMMap 這類軟體就可以觀察 Memory mapped,
或者逆向工程追蹤相關 API,或者繼續 google 看有沒有人提...
你對效能很擔心嘛,簡單點,做大量的通訊測試,兩個行程互傳資料,
測測時間,能用就能用。
網路遊戲對於資料傳輸量更是錙銖必較,你用 RPC、named pipe 應該怎樣都不會
比用 winsock 節省流量吧我猜...理論上網路遊戲也是可以用這些方式來溝通就是。
※ 編輯: purpose 來自: 124.8.138.160 (01/26 00:39)
推
01/26 00:34, , 7F
01/26 00:34, 7F
→
01/26 00:34, , 8F
01/26 00:34, 8F
→
01/26 00:35, , 9F
01/26 00:35, 9F
→
01/26 00:41, , 10F
01/26 00:41, 10F
推
01/26 00:43, , 11F
01/26 00:43, 11F
→
01/26 00:44, , 12F
01/26 00:44, 12F
→
01/26 00:44, , 13F
01/26 00:44, 13F
→
01/26 00:50, , 14F
01/26 00:50, 14F
→
01/26 01:01, , 15F
01/26 01:01, 15F
→
01/26 01:02, , 16F
01/26 01:02, 16F
推
01/26 01:13, , 17F
01/26 01:13, 17F
→
01/26 01:13, , 18F
01/26 01:13, 18F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章