声明在 DBus 上订阅了哪些信号?

Posted

技术标签:

【中文标题】声明在 DBus 上订阅了哪些信号?【英文标题】:Declare which signals are subscribed to on DBus? 【发布时间】:2011-01-15 11:34:34 【问题描述】:

有没有办法声明 Python 应用程序通过 DBus 订阅了哪些信号?

换句话说,有没有办法通过订阅信号的“Introspectable”接口来做广告。我使用“D-Feet D-Bus 调试器”。

例如应用程序订阅信号 X(使用 bus 对象上的 add_signal_receiver 方法)。

【问题讨论】:

【参考方案1】:

D-Bus 客户端在总线守护进程上调用AddMatch 以注册他们对匹配特定模式的消息的兴趣;当您创建代理对象时,大多数绑定会为特定服务和对象路径上的所有信号或该服务和对象路径上特定接口上的信号添加匹配规则。

使用 dbus-monitor 您可以看到添加的匹配规则:尝试运行dbus-monitor member=AddMatch,然后运行使用 D-Bus 的应用程序。同样,您可以窃听对RemoveMatch 的呼叫。但是,目前无法向守护进程询问当前有效的匹配规则集。考虑到守护进程已经知道,添加一种提出该问题的方法比添加一种让客户重新宣传这个问题的方法更有意义。

【讨论】:

【参考方案2】:

这可能是不可能的,因为信号是在总线上发出的,而应用程序只是挑选出有趣的东西。订阅不在 dbus 内部进行。

【讨论】:

我得出了同样的结论。谢谢。

以上是关于声明在 DBus 上订阅了哪些信号?的主要内容,如果未能解决你的问题,请参考以下文章

ReactiveCocoa(上)

做项目中都有哪些误区?

做项目中都有哪些误区?

Web 开发人员需要订阅哪些重要的订阅源?

Javascript异步编程方法之------“发布/订阅”

微信订阅号都有哪些功能?