客戶端專案中不可避免的要用到程序間的通訊,方式也多種多樣。單就開發而言,rpc這種模式最方便來做程序間通訊的手段。因為類似於本地函式的呼叫。實現這個機制需要滿足以下內容:
介面定義。乙個元件是否方便使用,主要是看介面的設計是否簡潔合理。
滿足本地函式呼叫的特點:函式未執行完不返回,只需要函式簽名和函式引數這些資訊。
是否支援一對多。
呼叫方需要繼承rpcservice類,建構函式需要傳入連線名稱,rpcservice根據這個名字與被調方建立連線。通過invoke方法呼叫遠端方法。invoke需要傳入要呼叫的函式名和函式引數,目前支援int double string bool四種引數型別,具體可參考invoke_def.h中的定義。也可以在該檔案擴充套件 getparam方法以支援更多引數型別。
接受方首先要繼承rpcservice類,構造 函式傳入channelname,這些與呼叫方的步驟相同,
要時當前類獲取接受能力,還需要有以前步驟:
def_process_invoke(
類名)
需要在當前類標頭檔案中定義該類可以接受遠端呼叫,
begin_invoke(類名
) on_invoke_3
(函式名
, int
, qstring
, int)
end_invoke
以上定義類似mfc中訊息路由,用來定義該類中那個函式可以被遠端呼叫,引數為被呼叫函式名和函式引數型別。on_invoke_數字,數字代表的是引數個數,目前最多支援3個引數的函式,已經滿足大部分應用,可以在invoke_def.h中進行擴充。
呼叫方和被呼叫方不必關心rpc啟動順序
rpcservice目前只支援1對1,主要考慮到多對多可能會導致的等待問題。
invoke方法目前不支援返回值,如果需要結果,只能通過被呼叫方再次呼叫invoke來呼叫主調方的介面來告知結果。
實際使用參考專案中的類:
rpcprocessor \ nimimrpc
客戶端專案中不可避免的要用到程序間的通訊,方式也多種多樣。單就開發而言,rpc這種模式最方便來做程序間通訊的手段。因為類似於本地函式的呼叫。實現這個機制需要滿足以下內容:
介面定義。乙個元件是否方便使用,主要是看介面的設計是否簡潔合理。
滿足本地函式呼叫的特點:函式未執行完不返回,只需要函式簽名和函式引數這些資訊。
是否支援一對多。
呼叫方需要繼承rpcservice類,建構函式需要傳入連線名稱,rpcservice根據這個名字與被調方建立連線。通過invoke方法呼叫遠端方法。invoke需要傳入要呼叫的函式名和函式引數,目前支援int double string bool四種引數型別,具體可參考invoke_def.h中的定義。也可以在該檔案擴充套件 getparam方法以支援更多引數型別。
接受方首先要繼承rpcservice類,構造 函式傳入channelname,這些與呼叫方的步驟相同,
要時當前類獲取接受能力,還需要有以前步驟:
def_process_invoke(
類名)
需要在當前類標頭檔案中定義該類可以接受遠端呼叫,
begin_invoke(類名
) on_invoke_3
(函式名
, int
, qstring
, int)
end_invoke
以上定義類似mfc中訊息路由,用來定義該類中那個函式可以被遠端呼叫,引數為被呼叫函式名和函式引數型別。on_invoke_數字,數字代表的是引數個數,目前最多支援3個引數的函式,已經滿足大部分應用,可以在invoke_def.h中進行擴充。
呼叫方和被呼叫方不必關心rpc啟動順序
rpcservice目前只支援1對1,主要考慮到多對多可能會導致的等待問題。
invoke方法目前不支援返回值,如果需要結果,只能通過被呼叫方再次呼叫invoke來呼叫主調方的介面來告知結果。
程序間通訊是什麼?如何實現程序間的通訊
include intpipe fd 2 匿名管道 include include include include intmain int id fork 建立程序 if id 0 父程序 buf s 0 將讀到的最後乙個字元的後乙個字元設定為 0,方便列印 printf s n buf else ...
程序間通訊(一)
為什麼程序間要通訊?1 資料傳輸 2 資源共享 3 通知事件 4 程序控制 程序間通訊方式 管道通訊 共享記憶體 訊息佇列 訊號通訊 一 管道通訊 管道是單向的 先進先出的,它把乙個程序的輸出和另乙個程序的輸入連線在一起。乙個程序 寫程序 在管道尾部寫入資料,另乙個程序 讀程序 從管道的頭部讀出資料...
程序間通訊(一)
半雙工管道 fifo 全雙工管道 命名全雙工管道 訊息佇列 訊號量 共享記憶體 套接字 多機其它為單機 管道 包括無名管道 命名管道 訊息佇列 訊號量共享儲存 scoket streams 等。其中,scoket和stream支援不同主機上的兩個程序ipc。一 管道 管道,通常指無名管道,是unix...