C++跨平台:进程间通讯(IPC)的技术选型

Posted CodeBowl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++跨平台:进程间通讯(IPC)的技术选型相关的知识,希望对你有一定的参考价值。

本系列继续记录,作为一个新人小白,在第一次接触C++跨平台(win、linux、mac)开发的经验和踩坑。

前言

在四个月前,我还是一名学生,开发一个功能,我的需求就是能跑就行,最多加一个没有bug。
而现在,在一次次的开会中,我成为了憔悴的社会打工人,也明白了在代码开发前,更重要的是设计和架构,确定好大方向,后面的事情才能走在正确的道路上。
开发一个功能,没有bug的运行自然是最低要求,但是往往在开发前,需要经过技术选型,选择一个最适合的方案,这几天有一个跨进程通信的需求,我们就使用什么方案也经过讨论,下面我把我的心得记录如下。

进程间通信

进程间通信是什么?

进程之间要保证相对独立,一个进程不能随便访问另一个进程的地址空间,这是系统安全性的保证和需要。但实际上进程之间确实也要协作在一起去完成一项大的任务,这时就需要进程之间有一定的通知和数据传递。在保证进程之间相对独立的同时,也要保证进程之间合理有效的通信。

简述一下需求

本机几个进程通信需求,用来传输数据,不需要跨机器。
跨平台需求。

进程间通信有哪些方式

在百度搜索常见的进程间通讯,你会得到以下答案:

  1. 匿名管道通信 匿名管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。
  2. 高级管道通信
  3. 有名管道通信
  4. 消息队列通信
  5. 信号量通信
  6. 共享内存等
  7. socket

但是在实际的开发中,我们更像使用的是成熟的方案,比如封装好的第三方库,这样极大减少开发成本,并且经过使用验证的第三方库,也可以保底不会出现大问题。

借鉴经验

借鉴已有的经验,通常公司开发,会使用三种方式:

  1. socket,使用socket封装一套通讯库,性能好
  2. rpc:现在比较新的方式
  3. ipc第三方库

不知道从哪里寻找经验的,建议直接github:

需要考虑的地方

经过以上的步骤,我们现在至少能找到一个能用,并且不要大量人力开发的ipc方案了。
但是,除此之外,我们还要考虑安全性、性能、复杂度等问题。

例如安全性问题,rpc方案,也就是远程过程调用,它实际上是为网络通讯设计的,所以他是借助http协议进行传输的,需要考虑从端口被恶意占用等问题,并且作为一个进程间通信的需求,rpc确实复杂度稍高。
同时性能也是考虑的重点,如果有高并发的情况,则更需要考虑。

ipc方案推荐

最后,推荐一下,也算做个总结,思路就是我上面写的,我从github上选取了一个跨平台实现的ipc方案,具体我还没有测试过,但是搜过性能压测什么,都是没什么问题的,大家可以做参考!

  1. grpc:google的方案,大公司保障:https://github.com/grpc/grpc
  2. RaftLib C++库,通过C++iostream类运算符进行流/数据流并发:https://github.com/RaftLib/RaftLib

参考资料

进程间的通信方式汇总
进程间通信(IPC)

以上是关于C++跨平台:进程间通讯(IPC)的技术选型的主要内容,如果未能解决你的问题,请参考以下文章

IPC之消息队列·即时通讯小程序

IPC 进程间通信

001:进程间通信类型

深刻理解Linux进程间通信(IPC)

深刻理解Linux进程间通信(IPC)

linux 进程间通信机制(IPC机制)- 管道