c++Lab-进程间通信的几种方式

1. 基于套接字的通信[集群案例]

现在的集群通常就是基于套接字的,集群的概念就是存在一个*服务器,A,以及工作服务器B,C,D,E
一开始,BCDE会和A建立连接
c++Lab-进程间通信的几种方式

其中B是注册,C是登录
玩家进入游戏后,直接和E进行交流,E负责响应玩家的输入和输出。
现在有一个问题,玩家希望从B1点到达B2点,涉及到了寻路,因为训练操作是很费资源的,我们并不希望在E里面进行操作,而是重新加一个服务器D直接负责寻路的工作,所以,E会访问A检索:哪个服务器是做寻路的呀?A查询了自己的“数据库”知道D是做寻路的,就把D的地址丢给了E
然后E就和D建立连接,产生了通道(两个进程之间进行了交互)
D跑完了之后,把结果直接丢给E,因为是在局域网里面,千M带宽,传输速度约等于0,从而提高了用户并发量
c++Lab-进程间通信的几种方式

2.基于管道的通信

套接字爽点在于简单,适合本机多进程通信也适合非本机多进程通信,现在介绍的管道的通信则仅适用于本机。
它是unix的一个概念,就是你两个进程之间可以架设一个管道,说是管道,其实你可以约等于将它看成一个半双工的文本文件。
你寄过信件吗?比如你和你女朋友要致敬90年代的爱情,然后手机也不用了直接写信聊天这个过程:
小A写信发给小B
小B阅读了信件,然后思考了一下
小B写信发给小A

管道的通信就是这样,进程A在管道上留下了信息,然后进程B读取了信息,又将新的信息覆盖给了管道
太古老,在游戏方面基本没见过使用,不太想研究

3. 信号机制

最直观的例子,中断信号,搞计算机的多少都接触过单片机,单片机里面的中断概念就是一个信号,这种东西可以直接广播给单片机里面正在执行的操作。另外一个比较形象的就是Android开发里面多应用的交互,Android内核直接提供了一套机制(Intent)可以将信号发送给另外一个应用,比如你在写打开摄像头逻辑时,你调用的函数就是通过内核转发的。

4. 共享缓存与消息队列

我觉得这两种机制很像,就是开辟一个共享区间,然后两个进程共享。消息队列这个概念在QT里面用的比较多,信号槽,消息队列(QT的两大神器)。

上一篇:【PoRE】Lab5: Reversing and Repacking


下一篇:【图像分割】基于matlab超像素图像分割【含Matlab源码 720期】