RPC程序間通訊的一種實現

2021-09-26 15:09:21 字數 1910 閱讀 9580

客戶端專案中不可避免的要用到程序間的通訊,方式也多種多樣。單就開發而言,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...