您的位置:知识库 » 手机开发

DBus学习笔记

作者: Jerry_Chen  来源: www.meegoq.com  发布时间: 2010-10-12 14:28  阅读: 25373 次  推荐: 0   原文链接   [收藏]  
摘要:DBus作为一个轻量级的IPC被越来越多的平台接受,在MeeGo中DBus也是主要的进程间通信方式,这个笔记将从基本概念开始记录笔者学习DBus的过程
[1] DBus学习笔记一:DBus学习的一些参考资料
[2] DBus学习笔记二:什么是DBus?
[3] DBus学习笔记三:DBus的一些基本概念

在介绍基本概念之前,先介绍一个学习DBus的好工具d-feet,这个工具主要是用来查看DBus的System Bus和Session Bus中的各个消息连接的。当然,你也可以在这里面添加自己创建的消息总线,以便于观察。

 

下面根据上图介绍一下DBus中的一些基本概念。

会话总线(Session Buses普通进程创建,可同时存在多条。会话总线属于某个进程私有,它用于进程间传递消息。

系统总线(System Bus在引导时就会启动,它由操作系统和后台进程使用,安全性非常好,以使得任意的应用程序不能欺骗系统事件。当然,如果一个应用程序需要接受来自系统总线的消息,他也可以直接连接到系统总线中,但是他能发送的消息是受限的。

Bus Name按字面理解为总线名称貌似不是很贴切,应该是一个连接名称,主要是用来标识一个应用和消息总线的连接。从上图可以看出来,总线名称主要分为两类

"org.kde.StatusNotifierWatcher"这种形式的称为公共名(well-knownname)

":1.3"这种形式的称为唯一名(Unique Name)

公共名提供众所周知的服务。其他应用通过这个名称来使用名称对应的服务。可能有多个连接要求提供同个公共名的服务,即多个应用连接到消息总线,要求提供同个公共名的服务。消息总线会把这些连接排在链表中,并选择一个连接提供公共名代表的服务。可以说这个提供服务的连接拥有了这个公共名。如果这个连接退出了,消息总线会从链表中选择下一个连接提供服务。

唯一名以“:”开头,“:”后面通常是圆点分隔的两个数字,例如“:1.0”。每个连接都有一个唯一名。在一个消息总线的生命期内,不会有两个连接有相同的唯一名。拥有公众名的连接同样有唯一名,例如在前面的图中,“org.kde.StatusNotifierWatcher”的唯一名是“:1.51”。

每个连接都有一个唯一名,但不一定有公共名。

只有唯一名而没有公共名叫做私有连接,因为它们没有提供可以通过公共名访问的服务。

Object Paths

“org.kde.StatusNotifierWatcher”这个连接中有三个Object Paths,标识这这个连接中提供了三个不同的服务,每个Object Paths表示一个服务。这个路径在连接中是唯一的。

Interfaces

在每个Object Paths下都包含有多个接口(Interfaces),举例如下接口:

org.freedesktop.DBus.Introspectable

org.freedesktop.DBus.Properties

org.kde.StatusNotifierWatcher

红色的两个是消息总线提供的标准接口,而剩下的一个是需要具体的应用去实现的。

MethodsSignals

Methods表示可以被具体调用的方法

Signals则表示的是信号,此信号可以被广播,而连接了这个信号的对象在接收到信号时就可以进行相应的处理。和Qt中的信号应该是一个意思。

0
0
标签:MeeGo教程

手机开发热门文章

    手机开发最新文章

      最新新闻

        热门新闻