D-BUS 介绍
一、概述
官方网站:http://www.freedesktop.org/wiki/Software/dbus,但是如果要下windows版的代码最好不要从sourceforge下,多次下来的1.2.4版本都无法正常解压。可以从svn上拿,具体见后面的dbus编译部分。
从官方首页中可以看到这样一段描述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进行了一层封装。方便使用官方建议应用程序使用这层进行调用;
体系结构图