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.深入分析實作.(如果有時間的話)