硬件控制在很多软件中是必不可少的模块。然而由于硬件本身存在的不稳定性(尤其是国产廉价元器件),以及在开发过程中的不断调整硬件型号、固件等,使得直接控制硬件的软件主程序存在许多不稳定因素。
由于楼主参与的项目开发中,一直将硬件模块作为第三方库供主程序调用,在使用过程中由于硬件控制库本身质量的不稳定导致频频出现软件崩溃,导致攻城狮们也濒临崩溃,项目延期严重。
经过一段时间的思考,我也越来越感觉到将硬件模块控制从主程序中剥离的必要性。将硬件模块剥离后,主程序与硬件控制程序之间的通信方式有多种,如管道、共享内存、D-Bus等。思前想后,最终决定选RPC的方式。
RPC是Remote Procedure Call,远程过程调用的缩写。使用RPC的最大好处是支持不同机器间通信,为未来的跨网调用提供了可能。
既然选择了RPC这条路,那接下来就要考虑如何将进程间通信的内容序列化。方案有很多,XML、Json、Message Pack,Protocol Buffer等等。鉴于MsgPack的灵活,暂时决定选用它来作为序列化工具。不同的序列化方案的性能比较可以参考这个帖子(性能比较)。开发语言使用C++11,Client及Server采用Qt5的库来实现。