顯示廣告
隱藏 ✕
※ 本文為 xxxx9659.bbs. 轉寄自 ptt.cc 更新時間: 2013-02-06 22:32:57
看板 C_and_CPP
作者 purpose (purpose)
標題 Re: [問題] IPC的選擇
時間 Sat Jan 26 00:02:59 2013


※ 引述《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
Using Named Pipes to Connect a GUI to a Console App in Windows | Dr Dobb's
[圖]
Software tools and techniques for global software development. Dr. Dobb's features articles, source code, blogs,forums,video tutorials, and audio podcasts, as well as articles from Dr. Dobb's Journal, BYTE.com, C/C++ Users Journal, and Software Development magazine. ...
 

作者說他寫鑑識軟體,實際跑的是 console 程式,但還有一個方便操縱的 GUI 前端。
然後因為 console 端每次都要運算很久,所以需要讓 GUI 前端有 "進度條" 的畫面,
考量到需要同步通訊,又需要在 LAN 的不同電腦運行,所以他採用 named pipe...


補充:
  named pipe 範例:http://tinyurl.com/bg2x5er
Introduction to Win32 Named Pipes (C++)
There are times when it’s extremely useful to be able to pass some data between different programs running on the same system. For example, you might... ...
 
  RPC 範例:       http://tinyurl.com/a46eacj
Introduction to RPC - Part 1 - CodeProject
An introduction to RPC programming. A simple RPC client/server application is explained.; Author: Anders Dalvander; Updated: 22 Dec 2012; Section: Internet / Network; Chapter: General Programming; Updated: 22 Dec 2012 ...
 

--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 124.8.138.160
EdisonX:推一個, 讚!!! :)1F 01/26 00:06
QQ29:若RPC只用namepipe實作 我可以假設他們就是map到同一塊mem嚕?2F 01/26 00:27
QQ29:效能應該就還不錯吧!? 不過很好奇 網路遊戲 等程式
QQ29:有沒有可能用named pipe or RPC等跨internet去實作呢....
QQ29:因為其實字面上我都不知道IPC底下是不是有偷做copy...
QQ29:主要是怕效能不彰...但又看不到她實作 只知道效果是什麼

  可以用 named pipe 後, 讓行程停住用 VMMap 這類軟體就可以觀察 Memory mapped,
  或者逆向工程追蹤相關 API,或者繼續 google 看有沒有人提...

  你對效能很擔心嘛,簡單點,做大量的通訊測試,兩個行程互傳資料,
  測測時間,能用就能用。

  網路遊戲對於資料傳輸量更是錙銖必較,你用 RPC、named pipe 應該怎樣都不會
  比用 winsock 節省流量吧我猜...理論上網路遊戲也是可以用這些方式來溝通就是。
※ 編輯: purpose         來自: 124.8.138.160        (01/26 00:39)
QQ29:p大說filemap"預設就是非同步在存取" 是說 多個process7F 01/26 00:34
QQ29:同時存取這塊 預設是沒有類似mutex的機制在保護 這樣嗎?
QQ29:才被p大說是預設非同步?
purpose:就跟你平常讀取記憶體一樣,隨時想讀就讀的意思...10F 01/26 00:41
QQ29:看named pipe 假設同時有兩個client readfile...11F 01/26 00:43
QQ29:他會讓第一個讀完 看註解server就exit了 然後第二個就讀不到
QQ29:覺得很怪...還是說server要while一直重創pipe...
QQ29:我自己試試看 感覺好像是一次性的 同時讀"好像"一個拿不到
QQ29:自己可能還要試試看 若client連上後去write pipe會不會蓋掉
QQ29:server原本寫的...然後就deadlock? 沒人讀(若只有一條thread)
QQ29:測試發現server writefile若client有讀過, server第二次
QQ29:write就完全不會block 滿奇怪的..感覺pipe真的只能用一次..

--
※ 看板: xxxx9659 文章推薦值: 0 目前人氣: 0 累積人氣: 184 
分享網址: 複製 已複製
guest
x)推文 r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇