从官方首页中可以看到这样一段描述 D-BUS 的话:“D-Bus is a message bus system, a simple
way for applications to talk to one another. In addition to interprocess
communication, D-Bus helps coordinate process lifecycle; it makes it simple and
reliable to code a “single instance” application or daemon, and to launch
applications and daemons on demand when their services are needed. ”
因此,D-BUS 从本质来说就是进程间通信(inter-process communication)(IPC)的一个实现。
他最初产生于 Linux 平台,是做为 freedesktop.org 项目的一部分来开发的。正开始深入地渗透到
Linux 桌面之中。已经在 Qt4,GNOME,Windows 以及 Maemo 实现。在 KDE4 中已经取代了著
名的 DCOP,在 GNOME 取代笨重的 Bonobo。在嵌入式系统中常用来实现 C/S 结构。
作为一个 IPC,他实现了两点:
1.在同一个桌面会话中不同的应用程序进行通讯:系统总线(system bus),这个总线由操作系统和后
台进程使用,安全性非常好,以使得任意的应用程序不能欺骗系统事件。应用程序可以直接和系统总线通
信,但是发送的消息受限制。
2.桌面程序与内核或守护进程进行通讯:会话总线(Session bus),属于登录用户私有。它是用户的
应用程序用来通信的一个会话总线。
二、D-BUS 特性
1.D-BUS 的协议是低延迟而且低开销的,设计得小(但是代码量不算很少吧)而且高效,以便最小化传
送时间。从设计上避免往返交互并允许异步操作。
2.协议是二进制的,而不是文本,这样就排除了费事的序列化过程(我们的万能参数序列化就比较占时间)。
3.考虑了字节顺序问题。
4.易用性:它按照消息而不是字节流来工作,并且自动地处理了许多困难的 IPC 问题,并且 D-Bus 库以
可以封装的方式来设计,这样开发者就可以使用框架里存在的对象/类型系统,而不用学习一种新的专用
于 IPC 的对象/类型系统。
5.请求时启动服务以及安全策略。
6.因为是做为 freedesktop.org 项目来开发的,有许多达人参加,所以质量应该是很有保证的。
7.支持多语言(C/C++/JAVA/C Sharp/Python/Ruby),多平台(Linux/windows/maemo)。
8.采用 C 语言,而不是 C++。
9.由于基本上不用于 internet 上的 IPC,因此对本地 IPC 进行了特别优化。
10.提供服务注册,理论上可以进行无限扩展。
三、构架
分成三层:
a.libdbus 库,实现了底层的 API 以及协议,他除了需要 XML 解析器以外没有必须的依赖。对于不同
的语言,协议可能被重新实现。这个库是一个基础,虽然官方说他不是设计给应用程序调用的,但是实际
上应用程序是可以直接调用的,特别是 windows 版,后面的使用分析中的例子就能看到;
b.消息守护进程,建立在 libdbus 的基础上,可以管理多个应用程序之间的通信。每个应用程序都和消
息守护进程建立 dbus 链接,由消息守护进程统一进行消息的派发;
c.各种包装库,绑定了一些常见的框架(qt,Glib,Java,Python,C sharp etc.)没什么新功能,
只是对 dbus 进行了一层封装。方便使用官方建议应用程序使用这层进行调用;