2011年3月17日 星期四

RMI in C++



之前設計 Client/Server 程式時,都是用 message 來當作 protocol。
例如:


#define msg_open  1
#define msg_close 2
...


Client 將 message 透過 socket 傳給 Server,Server 再對此 message 做解譯動作。
這種設計方式簡單,但常常要處理很 routine 的工作,自己要處理封包代表的意義。(也就是要解釋 buffer size 的大小問題)


比較好的處理方式是用 remote procedure call 的方式,將複雜的底層處理過程包裝起來,client 需要 server 服務時,只要利用類似 function call 的方式就可以達成目的。
通常這種做法像是 COBRA 通常都要用 IDL 的方式,寫一個語言無關的介面,然後再利用程式碼產生器產生出目的語言 (C++、Java...etc)


下面這篇文章,就不用額外的程式碼產生器,而是利用 C++ preprocessor 來產生 C++ code,也就是只需要 C++ compiler 就搞定啦。
http://www.codeproject.com/KB/threads/Rcf_Ipc_For_Cpp.aspx

不過要注意的是:
1. 需要 C++ boost library  (用到 Asio)
2. 我用 VS2010 編譯時,發生  error C3861: '_cpp_max': identifier not found 
     解法再此 link 
     https://connect.microsoft.com/VisualStudio/feedback/details/553420/std-cpp-max-and-std-cpp-min-not-available-in-visual-c-2010
      
3.  附上作者寫的 User Guide http://deltavsoft.com/w/RcfUserGuide/1.3/

    有興趣可以玩玩看!! Have Fun!!

1 則留言:

  1. 附上官方網頁 和 google code
    http://deltavsoft.com/w/index.html

    http://code.google.com/p/rcf-cpp/

    回覆刪除