zoukankan      html  css  js  c++  java
  • dbus和qtdbus

    什么是D-Bus?

    D-Bus是一种消息总线系统,用于两个应用之间的通信。
    对于进程间通信,D-Bus也可以管理应用的生命周期,

    Qt D-Bus

    D-Bus是一种linux下进程间通信(IPC)和远程方法调用(RPC)机制,使用统一的通信方式来取代linux下多种IPC竞争状态。
    它既可以进行系统级通信(system bus),也可以进行应用级通信(session bus)。
    它既可以进行总线通信,也可以进行点对点通信。

    总线Bus

    D-Bus 总线被设计用于多对多通信方式,因此在使用前需要创建一个中心服务,即总线,然后将应用绑定到总线上,通过总线聚集和分发。
    例如,如果要排序硬件设备,就使用系统总线;如果要和浏览器通信,就使用应用总线。

    Messages

    广播,信号,

    Service Names

    服务名就是应用的名称,用于一个应用在总线上寻找另一个应用。

    和服务名相似的概念是IP地址(IP addresses),一台计算机有一个ip地址,然后会有很多主机根据服务和他通信。

    注意,如果总线没有使用,那么服务也不会被使用。再和计算机网络对比一下,这就等同于点对点的网络,由于通信方已知,就不需要主机名或ip地址去找他了。

    D-Bus服务名和主机名很像,它是由一系列点和字母组成,通常是使用该组织的域名来命名,如:
    org.freedesktop.DBus

    Object Paths

    和网络主机一样,应用也支持应用间对象的传输,这些对象从 QObject 派生,使用父子关系(树)进行组织。不同的是,所有对象都会有一个最终的根路径。

    如果我们继续和网络服务对比,那么对象的组织形式就和URL的组织形式一样:
    ftp://ftp.example.com/pub/something

    对象路径看起来像文件系统,由斜线,字母,点和下划线组成。他们一定要以斜线“/”开头,但不一定要以斜线“/”结尾。

    Interfaces

    接口的概念类似于C++的抽象类(abstract classes)和Java的接口关键字(interface),用于调用者(caller)和被调用者(callee)建立联系,在dbus中使用contract代表接口。
    可以建立的方式有:

    • methods,方法
    • signals,信号
    • properties,属性

    Qt在他的插件系统中使用了一个非常相似的机制,通过Q_DECLARE_INTERFACE()宏来绑定唯一标识符。

    QDBusAbstractInterface

    QDBusAbstractInterface类是所有D-Bus接口类的基类,允许进行远程接口调用。
    由于被生成的代码类也都继承自 QDBusAbstractInterface ,因此这里描述的方法对于生成的代码也是有效的。
    另外,生成的代码还提供了成员函数来检测有效性。

    QDBusConnection

    QDBusConnection类表示一个dbus守护进程的连接。这个类是 D-Bus session 的第一步,使用它你也可以调用远程对象、接口、连接远程信号到本地槽,注册对象等等。

    D-Bus 连接是通过 connectToBus() 函数实现的,它开启了一个d-bus服务并进行了一些初始化工作,并使用一个名字绑定连接,以后就可以使用这个名字表示该连接。

    销毁连接可以使用 disconnectFromBus() 函数。

    一旦连接被销毁,就必须重新建立一个新的连接才能使用。

    通信方式有 sessionBus() ,systemBus() 和点对点的方式。

    QDBusServiceWatcher

    QDBusServiceWatcher类允许用户观察dbus服务的改变。

    他有三种观察模式:

    • 只观察注册信息;
    • 只观察未注册信息;
    • 观察所有服务所有权的改变(默认状态)

    参考链接: [1] https://en.wikipedia.org/wiki/D-Bus [2] https://www.freedesktop.org/wiki/Software/dbus/ [3] http://doc.qt.io/qt-5/qtdbus-module.html
  • 相关阅读:
    2020.2.14
    2020.2.13
    规划极限编程阅读笔记03
    学习进度——第十六周
    JSP跳转到Servlet的两种配置
    规划极限编程阅读笔记02
    规划极限编程阅读笔记01
    单词接龙
    学习进度——第十五周
    输入法评价
  • 原文地址:https://www.cnblogs.com/chendeqiang/p/12861615.html
Copyright © 2011-2022 走看看