Monday, December 26, 2022

[Protocol] D-Bus introduction

D-Bus,數據總線,是一個低延遲,低開銷,高可用性的 IPC 機制,协议传递的是二进制数据,, 而不是其他的文本格式 (如JSON/XML), 协议是基于消息处理的, 而不是基于流


相较于传统意义上的 IPC 机制(例如PIPE/FIFO/Socket/共享内存/SysvIpc),D-Bus提供了更高层次的抽象

目前也透過 kobject 與 kernel 做整合,如此一來,D-BUS 便能輕易整合 kernel、application 與 desktop,真正解決以往「系統整合」所遇到的障礙。

http://dbus.freedesktop.org/doc/dbus-glib/index.html

1. 方法调用(Method Call):用来实现跨进程的方法(函数)调用,配合代码生成工具,可以做到让进程间的函数调用和普通的函数调用几无区别

2. 信号(Signal):发布订阅(Pub-Sub)模式的通信机制,发送进程注册并发送(广播)信号,接收进程订阅自己感兴趣的信号。

3. 属性(Property):可类比 C++ 类中成员变量的 Getter-Setter,如果进程A提供了一个属性,那么其他进程可以通过D-Bus来读取、写入该属性。

在架構上分位三層

1. Layer 1 libdbus :freedesktop 機構提供的一個免費開源的一個由C語言編寫的 low-level API 。是提供dbus功能的庫。是高階API繫結的低階API

2. Layer 2 dbus daemon :dbus實現的IPC守護進行,隨Linux啟動,通過不通程序對其的連線,實現了多程序間訊息的路由(包含核心、網路、桌面等)

3. Layer 3 Wapper libraries (high-level API): 對 low-level API libdbus 的封裝 ,例如 libdbus-qt libdbus-python github.com/godbus/dbus ,這些不同程式語言實現的 Wapper 是不同開發者應該使用的lib,其簡化了D-Bus的開發難度。最基础的是 C,有官方提供的参考代码,也有 Java、Python等,每种语言的实现被称为 D-Bus Binding。

No comments:

Post a Comment

n8n index

 【n8n免費本地端部署】Windows版|程式安裝x指令大補帖  【一鍵安裝 n8n】圖文教學,獲得無限額度自動化工具&限時免費升級企業版功能