前言:
简单的说,进程间通信是一组编程接口,让程序员能够协调不同的进程,使之能在一个操作系统里同时运行,并相互传递、交换信息。同时一个程序可以是多进程,也可以是单进程,所以进程间通信也能实现软件间的通信服务。常见的进程间通信方式有:共享内存、Socket、管道、消息队列等;
简介:
D-Bus最初就是为Linux设计的一种进程间通信(IPC)和远程过程调用(RPC)机制,它采用了统一的协议进行底层通信,具有低延迟、低开销、高可用性的优点。它还能实现系统内核级进程和普通用户进程间的通信,如硬件驱动服务和打印机服务,串口读取等。它使用二进制消息传递协议,适合同机通信,由freedesktop.org项目提供,使用GPL许可证发行。D-Bus的主要概念为总线,注册后的进程可通过总线接收或传递消息,进程也可注册后等待内核事件响应,例如等待网络状态的转变或者计算机发出关机指令,当在总线上通信时,应用程序可以查询哪些其他应用程序和服务可用,并根据需要激活其中一个。在注册总线时分为了系统总线和会话总线。
消息传递:
在Qt 框架中对D-Bus进行了底层封装,客户不需要知道底层具体的通信方式,且实现了Qt 信号与槽方式的消息传递机制。
在注册总线通信时,会创建一个服务名称,应用给同一总线上的其他服务发现改服务,类似IP地址的概念,注册的服务名必须具有唯一性。服务名格式通常:由字母和数字组成的点分隔序列。通常的做法甚至是根据定义该服务的组织的域名来命名服务名称。
例:org.freedesktop.DBus
如网络通信类似,在总线上提供服务需要将提供服务的对象导出,用以向其他应用程序提供特殊服务,D_Bus对象注册与文件路径类似,是以斜杠分隔的标签,每个标签由字母、数字和下划线字符(“_”)组成。它们必须始终以斜杠开头,而不能以斜杠结尾。
声明接口:
接口的声明类似C++的抽象接口类,是声明一种可用的方法,类似函数调用与被调用者的关系,在Qt框架中,D-Bus接口的声明同它的插件声明方式类似,通过Q_DECLARE_INTERFACE()宏与一个惟一的标识符相关联,标识符通常由定义该接口的实体的域名构造。