Qt D-Bus -1

内容:

        介绍

        总线

        概念

                消息

                服务名

                对象路径

                接口

                速查表

        调试

        扩展阅读

Qt D-Bus

介绍:

            D-Bus是一个进程间通信(IPC)和远程过程调用(RPC)机制,最初为Linux开发,用一个统一的协议代替现有的和竞争的IPC解决方案。它还被设计为允许系统级进程(如打印机和硬件驱动程序服务)和普通用户进程之间的通信。它使用一种快速的二进制消息传递协议,它适用于同机通信,因为它的低延迟和低开销。它的规范目前由freedesktop.org项目定义,并可用于所有各方。

                    一般来说,通信是通过一个中央服务应用程序进行的,称为“总线”(因此得名),但是直接应用程序到应用程序的通信也是可能的。当在总线上通信时,应用程序可以查询哪些其他应用程序和服务可用,并根据需要激活一个应用程序。

总线:

        总线被使用在多对多通信。为了实现这一点,在任何应用程序连接到总线之前,都会启动中央服务器:这个服务器负责跟踪连接的应用程序,并正确地将消息从源路由到目的地。

            此外,D-Bus定义了两种著名的总线,称为系统总线和会话总线。这些总线是特殊的,因为它们具有定义良好的语义:一些服务被定义为在其中一个或两个总线中找到。

            例如,希望查询连接到计算机上的硬件设备列表的应用程序可能会与系统总线上可用的服务通信,而提供用户web浏览器打开的服务可能会在会话总线上找到。

            在系统总线上,您还可以期望对每个应用程序允许提供什么服务进行限制。因此,可以合理地确定,如果某个服务存在,它是由可信应用程序提供的。

概念:

    消息:在较低的级别上,应用程序通过向彼此发送消息而在D-Bus上进行通信。消息用于中继远程过程调用,以及与之相关的应答和错误。当在总线上使用时,消息有目的地,这意味着它们只被路由到相关方,避免由于“群集”或广播而造成的拥塞。然而,一种被称为“信号消息”的特殊消息(基于Qt的信号和槽机制的概念)没有一个预定义的目的地。由于其目的是在一对多的上下文中使用,所以信号消息被设计用来处理“选择”机制。Qt D-Bus模块将低级的消息概念封装为Qt开发人员熟悉的一种更简单、面向对象的方法。在大多数情况下,开发人员不必担心发送或接收消息。

    服务名:当在总线上通信时,应用程序获得所谓的“服务名”:它是应用程序选择在同一总线上让其他应用程序所知道的方式。服务名称由D-Bus总线守护进程代理并且被使用去有另一个程序路由消息。与服务名类似的概念是IP地址和主机名:计算机通常有一个IP地址,并且根据它提供给网络的服务,可能有一个或多个主机名。

            另一方面,如果不使用总线,则服务名称也不被使用。如果我们再次将其与计算机网络进行比较,这将等同于点对点网络:因为对等点是已知的,所以不需要使用主机名来查找它或它的IP地址。

                    D-Bus服务名称的格式实际上非常类似于主机名:它是一个由点分隔的字母和数字序列。通常的做法是根据定义该服务的组织的域名来命名一个服务名称。

                    例如,D-Bus服务是由freedesktop.org定义的,可以在服务名称下在总线上找到:org.freedesktop.DBus

对象路径:

    与网络主机一样,应用程序通过导出对象为其他应用程序提供特定的服务。这些对象是分层结构的,很像从QObject中派生出来的类父子关系。然而,有一个区别是,存在“根对象”的概念,所有对象都具有最终的父类。

            如果我们继续与Web服务进行类比,对象路径等同于URL的路径部分。与它们一样,D-Bus中的对象路径也类似于文件系统上的路径名:它们是分隔开的标签,每个标签由字母、数字和下划线字符组成(“”)。他们必须从一个斜杠开始,不能以一个结尾。

接口:

        接口类似于C++抽象类和Java的接口关键字,并声明调用者和callee之间建立的“契约”。也就是说,他们建立了可用的方法、信号和属性的名称,以及当通信建立时,双方期望的行为。Qt在其插件系统中使用了一种非常相似的机制:C++中的基类通过Q_DECLARE_INTERFACE()宏的方式与唯一标识符相关联。实际上,D-Bus接口名称的命名方式类似于Qt插件系统所建议的:通常由定义该接口的实体的域名构造的标识符。

速查表:

        为了便于记住命名格式及其目的,可以使用以下表格:

d - bus概念                                                   类比                                                 名字的格式
服务名称                                                       网络主机名                                      点分隔(“看起来像主机名”)
对象路径                                                       URL路径组件                                   分隔开的(“看起来像一条路径”)
接口                                                               插件标识符                                        以圆点分隔

调试:

    当开发使用D-Bus的应用程序时,有时可以看到每个应用程序在总线上发送和接收的消息的信息。

    这个特性可以在每个应用程序的基础上启用,在运行每个应用程序之前设置qdbusdebug环境变量。例如,我们可以通过运行控制器和汽车以以下方式运行D-Bus远程控制汽车示例中的汽车:














评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值