DBus 进程间的通信

家住魔仙堡 提交于 2019-12-06 07:42:27

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的文档,用的时候可以找来看看。



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!