D-BUS是一个提供简单的应用程序互相通讯的途径的自由软件工程,它是做为freedesktop.org项目的一部分来开发的。

D-Bus 深深地受到了DCOP系統的影響而且將在KDE 4版的release中取代DCOP;他已經被實做在Qt4, GNOMEWindows以及 Maemo 行動系統中。GNOME也逐渐的用它来取代了大部分的早期Bonobo机制。

D-Bus 允許程式在其上註冊以提供服務給其他的程式。同時他也提供客戶端程式查詢有哪些服務是可得的可能性。程式也可註冊以等待kernel之events比如說硬體的熱插拔。

D-Bus 被以daemon的方式實做。使用者可以執行好幾個D-Bus的實體,每個實體被稱為一個channel。通常系統中會有一個特權的channel稱之為 system channel,以及每個使用者擁有一個私有的實體。使用者需要私有的實體因為system channel將有存取的限制。

System channel主要的公用在於傳遞HAL的訊息給對這些訊息感興趣的processes。而私有的實體之功能在於提供程式間無限制的溝通。

D-BUS是一个设计目标为应用程序间通信的消息总线系统。它是个3层架构的进程间通信(IPC)系统,包括:

  • 函数库libdbus,用于两个应用程序呼叫联系和交互消息。
  • 一个基于libdbus构造的消息,总线守护进程可同时与多个应用程序相连,并能把来自一个应用程序的消息路由到0或者多个其他程序。
  • 一系列基于特定应用程序框架的Wrapper库。

D-BUS为了两个特定情况而设计:

  • 同一个桌面会话中两个桌面应用程序的通信,可使得桌面会话作为整体集成在一起以解决进程生命周期的相关问题。
  • 桌面会话和操作系统的通信,这里操作系统一般而言包括内核和系统守护进程。

所有使用D-BUS的应用程序都包含一些对象,它们一般映射为Gobject、QObject、C++对象、或者Python对象(也许不需要)。一个对象是一个实例而不是类型。当经由一个D-BUS连接受到一条消息时,该消息是被发往一个对象而不是整个应用程序。

为了允许消息能指定接受对象,还要提供引用对象的方法。在你偏爱的编程语言中,它也许叫做指针或者引用。但是上述所谓引用一般实现为与应用程序相关的内存地址,因此无法在应用程序之间传递。

为了解决这一问题,D-BUS为每个对象引入名字。这些名字看起来像是文件系统路径,例如一个对象可能叫做“/org/kde/kSpread /sheets/3/cells/4/5”。易读的路径名是受鼓励的做法,但也允许使用诸如“/com/mycompany /c5yo817y0c1y1c5b”等,只要它可以为你的应用程序所用。

Namespacing的对象路径以开发者所有的域名开始(如/org/kde)以避免系统相同进程内不同代码模块互相干扰。

D-Bus Broker 项目发布首个版本
D-Bus 消息总线即将在下个月迎来 15 岁生日,它并没有免于批评,长期以来它被批评臃肿、过度设计和缺乏维护,一些 bug 7 年了还没有解决,因为这些 bug 很难简单的修复,只能通过权宜之计绕过。为了解决 D-Bus 的诸多问题,开发者们宣布了 D-Bus Broker 项目,发布了首个公开版本,源代码托管在 GitHub 上。D-Bus Brok

发布于 2017-08-25 00:26:13 | 57 次阅读


Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务