多个应用程序(应用链)和多个链之间通过dbus进行进程间通信

问题描述 投票:0回答:1

我正在为我目前没有的真实硬件编写软件。软件由多个应用程序组成,这些应用程序应通过某些总线相互通信,例如I2C 或任何其他总线。我正在考虑使用 dbus 来模拟 HW 总线互连。所有平台的 API 都是相同的,但底层要么是 I2C 驱动程序,要么是 dbus 模拟。为了更好地想象,结构可能如下所示:

我已经对 dbus 进行了一些实验,这似乎是可行的 - 我想会有一个服务器将所有应用程序相互互连,并且 APP1 将通过服务器与 APP2 等进行通信。我的理解正确吗?

但是,我想到的是,在测试过程中,我正在执行多个实例来并行执行测试,这就是我不确定的,这是否可以通过 dbus 实现。如果有 APP1-1/2-1/3-1 的多个实例(APPx_y - x APP 编号,y - 实例编号),那么如何说 APP1 实例 1 应该与 APP2 实例 2 等进行通信?甚至可以使用 dbus 吗?对于这种情况,dbus 中是否有某种固有的机制,或者我需要使用一些会话号将其附加到 dbus 服务器和 dbus 应用程序客户端中,这些会话号将在应用程序启动期间使用?

linux ipc dbus
1个回答
0
投票

如果有多个 APP1-1/2-1/3-1 实例(APPx_y - x APP 编号,y - 实例编号),那么 APP1 实例 1 应该与 APP2 实例 2 等进行通信怎么办?是否可以使用 dbus?

为您的应用程序声明的总线名称添加一个区分符(如果有的话)。例如,如果您的应用程序要声明

com.renegade.App1
,请将其设为
com.renegade.App1.Session3
或类似的名称 – 当然还要让其他应用程序寻找这种风格的名称。

(当 GUI 多实例应用程序声明“众所周知的名称”时,它们通常将其进程 ID 添加为附加组件 - 例如

org.mozilla.Firefox
可能会变成
org.mozilla.Firefox.4567
。(实际上 Firefox 实际上添加了配置文件名称,就像
org.mozilla.Firefox.default
。))

如果应用程序想要通过名称来识别,则只有“服务器”应用程序需要执行此操作。只拨打公交车电话但不接听公交车电话的纯粹客户根本不需要认领姓名;他们仍然可以使用连接时获得的自动“唯一名称”来工作。

© www.soinside.com 2019 - 2024. All rights reserved.