天天看點

RPC通信架構——RCF介紹RPC通信架構為什麼選擇RCF簡單的性能測試參考資料總結

現有的軟體中用了大量的COM接口,導緻無法跨平台,當然由于與Windows結合的太緊密,還有很多無法跨平台的地方。那麼為了實作跨平台,支援Linux系統,以及後續的分布式,首要任務是去除COM接口。

在對大量架構進行調研後,決定使用RCF替換COM接口。

<a href="http://corba.org/" target="_blank">CORBA</a>

<a href="http://www.zeroc.com/" target="_blank">ICE</a>

<a href="http://thrift.apache.org/" target="_blank">Thrift</a>

<a href="http://zeromq.org/" target="_blank">zeromq</a>

<a href="http://www.freedesktop.org/wiki/Software/dbus/" target="_blank">dbus</a>

<a href="http://www.deltavsoft.com/" target="_blank">RCF</a>

<a href="http://www.inspirel.com/yami4/" target="_blank">YAMI4</a>

<a href="http://www.cs.wustl.edu/~schmidt/TAO.html" target="_blank">TAO</a>

經過各項對比,認為:

RCF的使用方式與現有的COM接口方式非常類似,在開發上可以更快速、更容易的替換COM,并且可以少犯錯誤;

從穩定性上來說,RCF從2008年釋出的第一個正式版本1.0,到現在的2.01,經曆了7個比較重大的版本變化,發展的使用者包括”愛立信、惠普“等這樣的大公司,在網絡上查找RCF相關的介紹,普遍都說不錯,是功能比較強大的分布式通信架構,由此可知RCF目前比較穩定,比較成熟;

RCF基于标準C++,支援Windows、Linux、Unix等作業系統,可以很好的完成跨平台功能;

RCF支援TCP、UDP、命名管道等通信方式;

RCF的Server端支援單線程與線程池模式,正好對應COM的兩種線程模式;

官方文檔号稱使用了零拷貝、零堆記憶體配置設定、Server端緩存等技術,用于提高性能;

比較重要的是,雖然官方隻有英文文檔,但是這份文檔非常通俗易懂,即使英文水準比較差,也能在一個晚上或者一個上午的時間内對RCF整體的使用、包含的功能、支援的協定等有比較詳細的了解,這對于後續的快速了解和快速開發并替換COM,有着至關重要的作用;

在我的筆記本 Windows7 專業版 SP1 x64 、Intel(R) Core(TM) i5-2450M CPU @ 2.5GHz、 12G記憶體 的機器上,編寫了Demo,對RCF進行了測試。

一個Server程式,一個Client程式,通過TCP進行通信,Client程式中調用Server服務的接口,這個接口實作是一個空方法,用來測試純接口調用的極限次數,Release x86版測試結果如下:

調用兩萬次,耗時1647ms左右,平均每秒可以調用12143次,平均每次調用耗時82微妙。

<a href="http://bbs.chinaunix.net/thread-4140638-1-1.html" target="_blank">求推薦:程序排程庫、程序間通信庫,All 開源,謝謝!-C/C++-ChinaUnix.net</a>

<a href="http://www.codeproject.com/Articles/12521/RCF-Interprocess-Communication-for-C" target="_blank">RCF - Interprocess Communication for C++ – CodeProject</a>

<a href="http://www.tuicool.com/articles/bINz2qA" target="_blank">分布式通信的幾種方式(EJB、RMI、RPC、JMS、web service雜談)</a>

<a href="http://www.oschina.net/project/tag/191/distributed-and-grid?lang=21&amp;os=36&amp;sort=view" target="_blank">C/C++ 分布式應用/網格開源軟體</a>

<a href="http://www.zhihu.com/question/19832447" target="_blank">現在主流開源分布式系統架構都有哪些?</a>

<a href="http://blog.csdn.net/archfree/article/details/6388951" target="_blank">thrift 入門介紹</a>

<a href="http://www.ibm.com/developerworks/cn/java/j-lo-apachethrift/index.html" target="_blank">Apache Thrift - 可伸縮的跨語言服務開發架構</a>

<a href="http://stackoverflow.com/questions/60649/cross-platform-ipc" target="_blank">cross platform IPC</a>

經過各項對比後,雖然RCF并不是最強大的架構,可能也不是性能最高的架構,但是在替換COM接口這種需求的情況下,RCF應該是最适合的架構,是以最終選擇RCF架構來完成此任務。