小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

D-Bus學(xué)習(xí)(二):基本概念

 昵稱1846320 2010-06-22
D-Bus的方式在移動手機(jī)操作系統(tǒng)中非常重要,包括Maemo,Moblin等以Linux為基礎(chǔ)的操作系統(tǒng)。估計(jì)Andriod也大量使用。D-Bus的相關(guān)學(xué)習(xí)資料見: http://www./wiki/Software/dbus ,在網(wǎng)上也有大量的學(xué)習(xí)資料,在 http://blog./u3/111961/ 中有不少的中文資料,收集了很多網(wǎng)絡(luò)資料。我決定認(rèn)真學(xué)習(xí)一下,做一下筆記。主要資料來源于上面兩個(gè)網(wǎng)站,尤其是freedesktop的D-Bus Tutorial,并參考了wiki,以及 http://www.ibm.com/developerworks/cn/linux/l-dbus.htmlhttp://blog.csdn.net/cuijpus/archive/2008/01/30/2073962.aspx 。
 
原生對象和對象路徑
  所有使用D-BUS的應(yīng)用程序都包含一些對象, 當(dāng)經(jīng)由一個(gè)D-BUS連接受到一條消息時(shí),該消息是被發(fā)往一個(gè)對象而不是整個(gè)應(yīng)用程序。在開發(fā)中程序框架定義著這樣的對象,例如JAVA,GObject,QObject等等,在D-Bus中成為native object。
  對于底層的D-Bus協(xié)議,即libdbus API,并不理會這些native object,它們使用的是一個(gè)叫做object path的概念。通過object path,高層編程可以為對象實(shí)例進(jìn)行命名,并允許遠(yuǎn)程應(yīng)用引用它們。這些名字看起來像是文件系統(tǒng)路徑,例如一個(gè)對象可能叫做“/org/kde/kspread/sheets/3/cells/4/5”。 易讀的路徑名是受鼓勵(lì)的做法,但也允許使用諸如“/com/mycompany/c5yo817y0c1y1c5b”等,只要它可以為你的應(yīng)用程序所用。Namespacing的對象路徑以開發(fā)者所有的域名開始(如 /org/kde)以避免系統(tǒng)不同代碼模塊互相干擾。
簡單地說:一個(gè)應(yīng)用創(chuàng)建對象實(shí)例進(jìn)行D-Bus的通信,這些對象實(shí)例都有一個(gè)名字,命名方式類似于路徑,例如/com/mycompany,這個(gè)名字在全局(session或者system)是唯一的,用于消息的路由。
方法和信號Methods and Signals
  每一個(gè)對象有兩類成員:方法和信號。方法就是JAVA中同樣概念,方法是一段函數(shù)代碼,帶有輸入和輸出。信號是廣播給所有興趣的其他實(shí)體,信號可以帶有數(shù)據(jù)payload。
  Tutorial這里說法有點(diǎn)不太清楚。在 D-BUS 中有四種類型的消息:方法調(diào)用(method calls)、方法返回(method returns)、信號(signals)和錯(cuò)誤(errors)。要執(zhí)行 D-BUS 對象的方法,您需要向?qū)ο蟀l(fā)送一個(gè)方法調(diào)用消息。它將完成一些處理(就是執(zhí)行了對象中的Method,Method是可以帶有輸入?yún)?shù)的。)并返回,返回消息或者錯(cuò)誤消息。信號的不同之處在于它們不返回任何內(nèi)容:既沒有“信號返回”消息,也沒有任何類型的錯(cuò)誤消息。
接口Interface
  每一個(gè)對象支持一個(gè)或者多個(gè)接口,接口是一組方法和信號,接口定義一個(gè)對象實(shí)體的類型。D-Bus對接口的命名方式,類似org.freedesktop.Introspectable。開發(fā)人員通常將使用編程語言類的的名字作為接口名字。
Proxies代理
  代理對象用來表示其他銀城的remote object。當(dāng)我們觸發(fā)了proxy對象的method時(shí),將會在D-Bus上發(fā)送一個(gè)method_call的消息,并等待答復(fù),根據(jù)答復(fù)返回。使用非常方便,就像調(diào)用一個(gè)本地的對象。
上面是從開發(fā)人員編程的角度,經(jīng)常涉及的一些概念,下面是D-Bus在工作或者處理時(shí)所涉及的一些概念。
Bus Names總線名字
  當(dāng)一個(gè)應(yīng)用連接到bus daemon,daemon立即會分配一個(gè)名字給這個(gè)連接,稱為unique connection name ,這個(gè)唯一標(biāo)識的名字以冒號:開頭,例如:34-907,這個(gè)名字在daemon的整個(gè)生命周期是唯一的。但是這種名字總是臨時(shí)分配,無法確定的,也難以記憶,因此應(yīng)用可以要求有另外一個(gè)名字well-known name 來對應(yīng)這個(gè)唯一標(biāo)識,就像我們使用域名來對應(yīng)IP地址一樣。例如可以使用com.mycompany來映射:34-907。應(yīng)用程序可能會要求擁有額外的周知名字(well-known name ) 。例如,你可以寫一個(gè)規(guī)范來定義一個(gè)名字叫做 com.mycompany.TextEditor。你的協(xié)議可以指定自己擁有這個(gè)名字,一個(gè)應(yīng)用程序應(yīng)該在路徑/com/mycompany /TextFileManager下有一個(gè)支持接口org.freedesktop.FileHandler的對象。應(yīng)用程序就可以發(fā)送消息到這個(gè)總線名字,對象,和接口以執(zhí)行方法調(diào)用。
  當(dāng)一個(gè)應(yīng)用結(jié)束或者崩潰是,OS kernel會關(guān)閉它的總線連接??偩€發(fā)送notification消息告訴其他應(yīng)用,這個(gè)應(yīng)用的名字已經(jīng)失去他的owner。當(dāng)檢測到這類notification時(shí),應(yīng)用可以知道其他應(yīng)用的生命周期。這種方式也可用于只有一個(gè)實(shí)例的應(yīng)用,即不開啟同樣的兩個(gè)應(yīng)用的情況。
地址
  連接建立有server和client,對于bus daemon,應(yīng)用就是client,daemon是server。一個(gè)D-Bus的地址是指server用于監(jiān)聽,client用于連接的地方,例如unix:path=/tmp/abcedf標(biāo)識server將在路徑/tmp/abcedf的UNIX domain socket監(jiān)聽。地址可以是指定的TCP/IP socket或者其他在或者將在D-Bus協(xié)議中定義的傳輸方式。
  如果使用bus daemon,libdbus將通過讀取環(huán)境變量自動獲取session bus damon的地址,通過檢查一個(gè)指定的UNIX domain socket路徑獲取system bus的地址。如果使用D-bus,但不是daemon,需要定義那個(gè)應(yīng)用是server,那個(gè)是client,并定義一套機(jī)制是他們認(rèn)可server的地址,這不是通常的做法。
  通過上面的描述,我們可以獲得下面的視圖:
Address –> [Bus Name] –> Path –> Interface –> Method
bus name不是必要的,它只在daemon的情況下用于路由,點(diǎn)對點(diǎn)的直接連接是不需要的。
簡單地說:Address是D-Bus中server用來監(jiān)聽client的地址,當(dāng)一個(gè)client連接上D-Bus,通常是Daemo的方式,這個(gè)client就有了一個(gè)Bus Name。其他應(yīng)用可以根據(jù)消息中所帶的Bus Name,來判斷和哪個(gè)應(yīng)用相關(guān)。消息在總線中傳遞的時(shí)候,傳遞到應(yīng)用中,再根據(jù)object path,送至應(yīng)用中具體的對象實(shí)例中,也就是是應(yīng)用中根據(jù)Interface創(chuàng)建的對象。這些Interface有method和singal兩種,用來發(fā)送、接收、響應(yīng)消息。

這些概念對初學(xué)者可能會有些混淆,但是通過后面學(xué)習(xí)一個(gè)小程序,就很清楚,這是后面一個(gè)例子的示意圖,回過頭來看看之前寫的這篇文章,這個(gè)示意圖或許會更清楚。

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多