DBus笔记

2023-09-15 13:40:22
  1. 包含2套总线:system bus,service bus,权限不同,system bus需要kernel或root权限
  2. dbus daemon进程提供服务,
    有systemd启动dbus daemon,为system bus和service bus分别启动一个daemon。
  3. native object:收发消息的应用需要向dbus注册object(一个或多个),object包括接口、消息类型等定义。
  4. object path:类似文件路径名,也可用域名等,例如:/org/kde/kspread/sheets/3/cells/4/5
  5. object有2种成员:method和signal(广播,有data payload)
  6. interface:dbus支持interface,带namespace,如:org.freedesktop.Introspectable。
    在不同的语言的实现中(不同语言对dbus的封装)有不同的对应机制,如java interface或C++ pure virtual class。
  7. proxy object:
    手动处理method call:创建message,发送msg,等待reply,处理reply。
    使用proxy object:上述步骤会被封装,类似调用本地对象的方法。
// without proxy object
Message message = new Message("/remote/object/path", "MethodName", arg1, arg2);
Connection connection = getBusConnection();
connection.send(message);
Message reply = connection.waitForReply(message);
if (reply.isError()) {
   
} else {
   Object returnValue = reply.getReturnValue();
}

// with proxy object
Proxy proxy = new Proxy(getBusConnection(), "/remote/object/path");
Object returnValue = proxy.MethodName(arg1, arg2);
  1. unique connection name:(类似于ip地址)
    1)app连接bus daemon会分配一个连接名。
    2)在daemon声明周期内连接名不会重用,一个名字只会对应一个app(一个name只能被一个应用own)。
    3)以冒号开头,例如“:34-908”,数字没有含义,只保证唯一性。

  2. well-known name(类似于域名)
    除了unique connection name,应用可申请well-known name。
    例如,com.mycompany.TextEditor,对应object path: /com/mycompany/TextFileManager

  3. well-known name用途
    1)message routing,通过well known name找到接手着
    2)track life-cycle,application exit/crash notification,当app退出时,message bus通知其他应用对应的app name失去owner。
    3)single instance app:通过well-known name检测服务是否已经启动

  4. dbus中server和client仅在创建连接时有不同,建立连接后通信时对称的(双向通信,不区分client,server)。

  5. dbus daemon的监听地址
    1)UNIX domain socket: unxi:path=/tmp/socket_name
    2)tcp/ip socket
    3)默认daemon从环境变量中获取监听地址:
    DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
    4)特例,不使用dbus daemon,需要明确server app和client app,以及它们的地址。
    不是总线机制,一对一通信。

  6. 一个方法的调用链路

Address -> [Bus Name] -> Path -> Interface -> Method
1)[Bus Name],可选,如果没有使用dbus daemon就不需要bus name,相当于点对点通信。
2)interface可选,如果没有interface,则不允许在一个对象上有重命名方法;使用interface,不同的interface中允许有重名方法。
3)Address和Bus Name定位到application;path定位到object(带包名限定对象名,FQDN),提供服务的对象;interface.method定位到具体的执行方法
	上面的调用链路,相当于:
application . package-name.object . interface . method
  1. 4种message:
    1)method call message
    2)method return message
    3)error message by invoking a method
    4)signal message / event message,广播,单向,一对多

消息分为2类:
1)方法调用,前3种消息,调用和返回双向,一一对应。
2)广播消息,第4中,单向,一发多收。

  1. 函数调用对应各种类型的消息。

  2. 消息格式:
    1)header,包括多个field。
    2)body,包括多个argument。

  3. 内部检查接口:org.freedesktop.DBus.Introspectable
    只有一个方法:Introspect():返回一个xml串,描述对象的接口、方法和信号等信息。

  4. 数据量限制:一次最大发送32K。

更多推荐

电子图书馆

bookget支持一下电子图书馆藏书:中国地区数字图书馆:国家图书馆http://read.nlc.cn/thematDataSearch/toGujiIndex北京故宫博物院-故宫名画记https://minghuaji.dpm.org.cn/广州大典http://gzdd.gzlib.gov.cn/Hrcanton

时间序列的重采样和pandas的resample方法介绍

重采样是时间序列分析中处理时序数据的一项基本技术。它是关于将时间序列数据从一个频率转换到另一个频率,它可以更改数据的时间间隔,通过上采样增加粒度,或通过下采样减少粒度。在本文中,我们将深入研究Pandas中重新采样的关键问题。为什么重采样很重要?时间序列数据到达时通常带有可能与所需的分析间隔不匹配的时间戳。例如以不规则

DETR纯代码分享(八)position_encoding.py(models)

一、导入一些Python库和模块importmathimporttorchfromtorchimportnnfromutil.miscimportNestedTensor上面的代码段主要是Python代码,用于导入一些Python库和模块,以下是对每行代码的详细解释:importmath:这一行代码导入了Python的

【STM32笔记】HAL库I2C通信配置、读写操作及通用函数定义

【STM32笔记】HAL库I2C通信配置、读写操作及通用函数定义文章目录I2C协议I2C配置I2C操作判断I2C是否响应I2C读写附录:Cortex-M架构的SysTick系统定时器精准延时和MCU位带操作SysTick系统定时器精准延时延时函数阻塞延时非阻塞延时位带操作位带代码位带宏定义总线函数一、位带操作理论及实践

解决Selenium中无法点击元素,Selemium使用JS代码 driver.execute_script点击元素

@FindBy(how=How.XPATH,using="//*[text()='A1.Approved']")privateWebElementApproved;driver.execute_script("arguments[0].click();",Approved)这句话的意思是使用JavaScript在浏览器

【C++】AVL树

个人主页:🍝在肯德基吃麻辣烫我的gitee:C++仓库个人专栏:C++专栏文章目录前言一、什么是AVL树?设计AVL树的原因二、AVL树的性质三、二叉树节点的定义四、AVL树的插入旋转1)右单旋2)左单旋3)左右双旋4)右左双旋AVL树插入完整代码验证一棵树为AVL树AVL树的性能分析总结前言本文章将会模拟实现一棵A

iMazing 2 .17.9最新官方中文版免费下载安装激活

iMazing2.17.9最新版是一款帮助用户管理IOS手机的应用程序,iMazing2最新版能力远超iTunes提供的终极的iOS设备管理器。IMazing与你的iOS设备(iPhone、iPad或iPod)相连,使用起来非常的方便。作为苹果指定的iOS设备同步工具。mazing什么意思iMazing2.17.9是一

springcloud相关面试题

目录springcloud相关面试题SpringCloud几个核心组件服务注册与发现组件——Eureka网关组件——Gateway路由:过滤:服务调用组件——Feign(默认包含Ribbon、Hystrix,基于Ribbon实现负载均衡)Ribbon和Feign调用服务的区别Feign、Ribbon、Hystrix三者

spring的ThreadPoolTaskExecutor装饰器传递调用线程信息给线程池中的线程

概述需求是想在线程池执行任务的时候,在开始前将调用线程的信息传到子线程中,在子线程完成后,再清除传入的数据。下面使用了spring的ThreadPoolTaskExecutor来实现这个需求.ThreadPoolTaskExecutor在jdk中使用的是ThreadPoolExecutor,用于自定义线程池。在spri

FTP和SFT区别记录笔记

项目中,需要使用ftp服务器上传下载文件,之前做过sftp的文件上传下载,以为是一个东西,迅速的把之前的工具类拿过来使用,发现文件为空,特此记录一下二者的区别和工具类。SFTP(SecureFileTransferProtocol)和FTP(FileTransferProtocol)是两种用于文件传输的协议,它们之间有

软考-操作系统

/4操作系统的作用进程进程的概念进程是程序的一次执行过程,没有程序就没有进程进程可有多个线程,线程可共享资源进程的两个基本属性:可拥有资源的独立单位可独立调度和分配资源的基本单位线程可共享:内存地址空间代码数据文件线程不可共享:程序计数器寄存器栈进程的状态进程的调度(PV操作)重重点同步是合作进程的直接制约问题互斥是申

热文推荐