1. 程式人生 > >C++ 簡單遠端呼叫中介軟體設計

C++ 簡單遠端呼叫中介軟體設計

   我寫過一些 socket 程式, 隨著程式的逐步複雜,直接用 socket 程式設計顯得有些麻煩。根據軟體應該模組化的思想,應該把軟體中的 socket 通訊部分相對獨立出來做成一個“中介軟體”。我用 C++ 寫了一個最簡單的“遠端呼叫中介軟體” 原理演示程式, 共享出來和大家討論(本人水平有限,如有錯誤,歡迎批評)。這個程式演示了一組簡單的遠端物件呼叫,應用程式通過本地代理物件訪問遠端計算機上 C++ 物件,如同訪問真正的本地物件一樣方便。這個遠端物件呼叫程式的原理並不難,服務端有一個通訊類處理 socket 通訊,提供各種服務的服務端物件把自己的指標傳給通訊類的物件,儲存在一個 std::map 中,通訊類的物件根據客戶端的請求呼叫服務端的不同功能的 C++ 物件,然後把呼叫結果返回客戶端。客戶端也有一個通訊類處理 socket 通訊,客戶端的代理物件代表服務端物件接受呼叫,然後通過通訊類把類標誌,函式標誌,函式引數傳給服務端,呼叫服務端物件,然後把呼叫結果返回客戶端的呼叫者。附件中是程式原始碼,真正的本人原創 :-) 。

   這只是一個簡單的演示程式,我也不能保證它沒有錯誤。您可以把這個程式中的原始碼用在您自己的程式中,只要您自己負責程式的質量,並且註明引用部分的原作者。

檔案: gmrcmw_20070223.tar
大小: 30KB
下載: 下載


 2007年2月23日 補充:

    要呼叫遠端的 C++ 物件,本地程式需要按約定格式向遠端傳送:遠端物件的類標識,同一個類的不同物件的物件標識(不過在我的這個小程式中遠端同一個類只有一個物件,所以我省略了物件標識),成員函式標識,函式引數,然後接收遠端返回的呼叫結果資料。

    遠端物件的類標識是一個 32位無符號整數,在我的程式中有兩個遠端物件類,一個可以完成整數的加減法,另一個可以完成浮點數的加減法 (呼叫遠端物件做加減法是有些誇張,但是這樣可以演示遠端呼叫如何工做) 。它們的類標識是:
#define  CLASS_INT_CALC       10001
#define  CLASS_FLOAT_CALC     10002

每個類中有兩個成員函式完成加減法,它們的成員函式標識是:
#define  FUNC_ADD         20001
#define  FUNC_SUB         20002

本地代理物件代表遠端物件接受呼叫,它們的是: