summary
DBus本身是属于比较高阶层的IPC的分装,他的底层是用socket来实现的。
DBus的应用特别的广泛,比如systemd, USB热拔插,界面程序之间的通信等等。
DBus还有更高级的封装,比如 GDBUS和QDBUS。
theory
dbus的原理很简单,没有什么好讲的,只要知道client,server和deamon之间的相互交互就可以了,dbus的优势在与清晰的统一的借口定义,然后是其无所不在的广泛的应用。
Keywords
DBus有几个重要的概念:
signal : 是由server向client发送的message
method: 是由client发起请求后server响应的消息
interface:就是一系列的signal和method的集合,类比C++的class,他会有一个自己的名字。
proxy:代表远端的server
Implement
所有的通信都需要一个event loop来对通信实时响应,gdbus中有g_main_loop, 这个很简洁明了。
其中有一些简单的回调函数作为响应,dbus的回调有连接和断开两个,因为dbus程序可以在运行的过程中实现不停的断开和连接的变化,而不是一开始就设定好了状态的,这个设置非常好用,比如usb的热插拔,随便什么时候插什么时候拔都OK。但是这个要特别留心memory leak的问题。
gdbus一般在实现的过程中会配置一个 xml文件,这个文件中会有signal,method,interface的信息,然后会有一个配套的codegen的工具生成代码。
生成的代码比较多,细看一下还是很有规律的,主要就signal method相关的函数,interface相关的class,还有分别对应于client和server的proxy的定义,主要就这5块。
dbus在使用的过程中会有一个dbus-monitor来检测通信的情况,这个还支持一些过滤参数方便查看。
Reference
另外nokia有一套对dbus的解释的文档,很详细,是我见过的最好的dbus的文档,用的时候可以找来看看。
来源:CSDN
作者:wangeen
链接:https://blog.csdn.net/wangeen/article/details/49008409