1.DBus 是什么
a) DBus 是一种本地进程间通信机制,支持点对点的通信,以及广播/订阅式的通信方式.
b) DBus将要传输的的数据结构化为二进制数据.包括不同长度的整数.浮点数.字符串.数据.复合类型等等.
2. DBus组成部分
DBus有两个主要组成部分,一是点对点通信的支持库,任何想用DBus通信的进程都可以引用;二是dbus服务进程,其作用类似于总线,进程可以连接到这个总线,并在总线上传输消息.流程:进程使用支持库,连接到服务进程总线并收发消息.
3.总线地址
每条总线者有总线地址,进程通过这个地址连接到总线.总线地址一般是类似于"/tmp/dbus_***"这类socket接口,但也有可能是TCP端口,或者其他通信方式接口.具体如何使用使用这些接口通信,是完全封装在dbus支持库的.我们使用都是说客户进程打开并连接到总线.
4.每个连接到总线的对象(连接称为对象,总线也是对象,总线对象本身提供了很多接口与方法)
总线上的每个连接都有名字.这些名字一般叫做连接名,称为bus names.(也可以不设置连接名,比如你不提供服务)连接名由'.'分开的字符串组成,比"com.free.add",中间的字符可以是字母.数字.连接线.下划线.当连接建立以后.DBus服务会分配一个不可改变的连接名,称为唯一连接名.这个连接名即使在进程结束后也不会再被其他进程所使用.唯一连接名以冒号开头,像是这个样子"3:34-907",用以来区分不同的连接
5. 对象 接口 方法 信号 关系如下
对象 对象
| |
-------------------------------总线
|连接名
--
|对象|
--
__|__
| |. ..
接口 接口
___|
| |..
方法.信号.
这种方法很像c/s架构,也可以当做这样模型来看,只要可以理解.
6.代理与请求
总线上的对象访问方式有两种:一种是代理,客户可以调用本地接口与对象通信,此时,本地接口充当了代理的角色,看起来就像调用本地接口一样;别一种是请求: 客户向某个对象发送一个请求的过程,对象被请求执行一个明确的,有名称的动作.客户会返回结果,不管正常的还是错误的.
7.同一个对象的请求的到达顺序与发送顺序一样,但响应消息不一定发送的一样,不过每一条请求都有一个编号,故不会错误接收别的响应消息.
写这个的原因,是让我们先有一个大的概念及架构,由表及里的去理解.我试过去直接读源码,发现这样效率很低,全篇看spec文档,这个也比较费时间.所以,我将用以下的方法去学习dbus
1. dbus大概介绍
2.dbus 简单编程
3.dbus组成及在系统中的应用.
4.深入分析实现.(如果有时间的话)