现有的软件中用了大量的COM接口,导致无法跨平台,当然由于与Windows结合的太紧密,还有很多无法跨平台的地方。那么为了实现跨平台,支持Linux系统,以及后续的分布式,首要任务是去除COM接口。

在对大量框架进行调研后,决定使用RCF替换COM接口。

RPC通信框架

  1. CORBA
  2. ICE
  3. Thrift
  4. zeromq
  5. dbus
  6. RCF
  7. YAMI4
  8. TAO

为什么选择RCF

经过各项对比,认为:

  1. RCF的使用方式与现有的COM接口方式非常类似,在开发上可以更快速、更容易的替换COM,并且可以少犯错误;
  2. 从稳定性上来说,RCF从2008年发布的第一个正式版本1.0,到现在的2.01,经历了7个比较重大的版本变化,发展的用户包括”爱立信、惠普“等这样的大公司,在网络上查找RCF相关的介绍,普遍都说不错,是功能比较强大的分布式通信框架,由此可知RCF目前比较稳定,比较成熟;
  3. RCF基于标准C++,支持Windows、Linux、Unix等操作系统,可以很好的完成跨平台功能;
  4. RCF支持TCP、UDP、命名管道等通信方式;
  5. RCF的Server端支持单线程与线程池模式,正好对应COM的两种线程模式;
  6. 官方文档号称使用了零拷贝、零堆内存分配、Server端缓存等技术,用于提高性能;
  7. 比较重要的是,虽然官方只有英文文档,但是这份文档非常通俗易懂,即使英文水平比较差,也能在一个晚上或者一个上午的时间内对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微妙。

参考资料

求推荐:进程调度库、进程间通信库,All 开源,谢谢!-C/C++-ChinaUnix.net

RCF - Interprocess Communication for C++ – CodeProject

分布式通信的几种方式(EJB、RMI、RPC、JMS、web service杂谈)

C/C++ 分布式应用/网格开源软件

现在主流开源分布式系统架构都有哪些?

thrift 入门介绍

Apache Thrift - 可伸缩的跨语言服务开发框架

cross platform IPC

总结

经过各项对比后,虽然RCF并不是最强大的框架,可能也不是性能最高的框架,但是在替换COM接口这种需求的情况下,RCF应该是最适合的框架,所以最终选择RCF框架来完成此任务。

最新文章

  1. 《zw版·Halcon-delphi系列原创教程》 只有2行代码的超市收款单ocr脚本
  2. 配置Tomcat 中文字符集问题
  3. xcode 预编译头文件
  4. ios 从微信返回自己的app
  5. Navigation学习笔记
  6. CTabCtrl - 如何使用TabCtrl控件
  7. cocos2d-x: 33种切换场景
  8. STM32F407IG开启FPU,做开方运算
  9. 【Android 应用开发】GitHub 优秀的 Android 开源项目
  10. .NET 常用ORM之NHibernate
  11. 将 Range 对象赋给变量
  12. OOP随笔
  13. Windows服务器防火墙配置规范
  14. 【原创】大叔经验分享(41)hdfs开启kerberos之后报错Encryption type AES256 CTS mode with HMAC SHA1-96 is not supported/enabled
  15. or 的判断
  16. mint19 源码安装python3.7
  17. Notification 通知传值
  18. POJ 2083 Fractal 分形题目
  19. css动画,展开折叠图标
  20. 洛谷P3567[POI2014]KUR-Couriers(主席树+二分)

热门文章

  1. JS——事件基础应用
  2. graphite 绘图工具
  3. C# 获得Properties下的定义的资源
  4. js中关于new Object时传参的一些细节分析
  5. SpringMVC与MyBatis整合方法
  6. Java中字符串的常用属性与方法
  7. [C#] 序列化实现对象的深拷贝
  8. uva253 Cube painting(UVA - 253)
  9. 基于Arduino的音乐动感节奏灯
  10. Vue2构建项目实战