本文档适用于对 Qt 中 DBus 使用有需求或者 Qt 间应用通信需求的开发工程师。
问:SylixOSQt 是否支持 DBus 桌面级应用进程通信?是否还有其他通信方式?
答:目前 SylixOS Qt 并不支持 DBus,因为 DBus 目前为 linux 独有通信方式。后续 SylixOSQt 可能会对 DBus 进行适配。
对于进程间通信,SylixOS 也有其支持的 IPC 机制。可以根据应用开发手册进行了解与使用。
DBus 是一种高级的进程间通信机制,它由 freedesktop.org 项目提供,使用 GPL 许可证发行。DBus 最主要的用途是在 Linux 桌面环境为进程提供通信,同时能将 Linux 桌面环境和 Linux 内核事件作为消息传递到进程。注册后的进程可通过总线接收或传递消息,进程也可注册后等待内核事件响应,例如等待网络状态的转变或者计算机发出关机指令。目前,DBus 已被大多数 Linux 发行版所采用,开发者可使用 DBus 实现各种复杂的进程间通信任务。
DBus 是实质上一个适用于桌面应用的进程间的通讯机制,即所谓的 IPC 机制。适合在同一台机器,不适合于 INTERNET 的 IPC 机制。DBus 不是一个为所有可能的应用的通用的 IPC 机制,不支持其他 IPC 机制的很多特性。DBus 提供了一个低时延、低消耗的 IPC 通讯,因为它采用了二进制的数据交换协议,不需要转换成文本化的数据进行交换,DBus 提供了面向多重对象系统的包装,可以在原有的面向对象的应用框架下使用 DBus,不需要学习新的概念和规范等。
DBus 是支持一对一和多对多的对等通讯,在一对一的直接通讯时,两个应用程序连接在一起,这是最简单的工作方式。在多对多的通讯时,这就需要一个叫 DBus 后台的角色去分转,一个应用程序发消息给另外一个应用程序,先到达后台,再让后台将信息发送到目的应用程序。在这里 DBus 后台就充当着一个路由器的角色。
同时DBus包含了系统更新通知,如插入新设备通知、新软件安装通知等,和桌面应用的交互协作能力,可以作为文件系统监控器和配置服务器。
SylixOS 应用开发同样有它支持的 IPC 机制,进程是计算机系统分配资源的最小单位,每个进程都有自己的一部分独立的系统资源,彼此是隔离的。为了能使不同的进程互相访问资源并进行协调工作,需要进程间通信机制。
常见的进程间通信方式有:管道、命名消息队列、命名信号量、共享内存、信号等。
同时 SylixOS 也支持 socket 通信方式,SOCKET 是用于同一台主机的进程间通讯(IPC)。它不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序列号应答等。只是将应用层数据从一个进程拷贝到另一个进程。常用的 socket 类型有三种:流式(SOCK_STREAM)、数据报式(SOCK_DGRAM)以及原始式(SOCK_RAW)。