5

D -Bus 规范

D-Bus 是.. 应用程序相互通信的一种简单方式... 目前通信应用程序在一台计算机上...

我想要像 D-Bus 这样的东西,但可以跨多台 Linux 机器工作,并且可能涉及防火墙。例如,如果我的邮件服务器决定它收到一条重要消息,我希望它向总线上发布一个事件,我家中的计算机可以看到并可能通过启动一个linpopup窗口来响应。

我感兴趣的事件相对较少,所以低性能的技术是可以的。但我不希望重新发明任何轮子。我还希望尽可能多地用 shell 脚本或其他高级语言编写,而尽可能少地用 C 语言编写(但如果需要的话,我愿意调用 C API)。

我解释 D-Bus 官方网页的方式,他们说让 D-Bus 与多台计算机通信会很好,但它不起作用

编辑:D-Bus 对我的吸引力在于发布和订阅的模型:

  • 观察有趣事件的机器将该事件发布到“系统”。

  • 对特定事件感到好奇的机器只订阅这些事件。当事件发生时,“系统”会让机器知道。

在 D-Bus 中,“系统”是一台机器。我想要多台机器类似的东西。这排除了直接解决方案,如机器之间的 TCP 或 SMTP 通信。但我很高兴拥有一个接收所有发布和订阅请求的中央服务器。我开始认为自己构建比理解高级消息队列协议 (AMQCP)更容易,这对于我这样的人来说太高级了。

性能不是问题。简单绝对是一个对象。

再一次:我应该看什么软件?

4

8 回答 8

3

您应该搜索消息传递解决方案,但这些解决方案取决于您打算使用哪种语言。Java 有这个功能已经有一段时间了,称为 JMS(Java 消息服务)。然而,存在其他实现。

  • ZeroMQ具有以下 API 绑定:C、C++、Python、.NET/Mono 等
  • OpenAMQ具有以下 API 绑定:Python、Java、Ruby 和 C

我没有使用不同框架的经验,所以我不能告诉你使用什么,但你可以试一试。

于 2009-05-02T06:59:30.470 回答
3

管理应用程序之间的消息和通信的“新事物”显然是 Rabbit。

是 AMQP 的一种实现,它建立了消息传递、路由和安全...

检查这个:

http://www.rabbitmq.com

http://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol

于 2009-05-02T06:35:14.523 回答
2

由于我的研究将我引向了这个古老的问题,并且从那以后发生了很多事情,我想补充一下。

您想看看 MQTT,它是物联网的标准。这是自 2016 年以来的 ISO 和 OASIS 标准。http: //mqtt.org/

它使用起来非常简单,并且设计为轻量级。原理是发布/订阅。

一个非常好的实现是 Mosquitto https://mosquitto.org/,它位于 Eclipse 的保护伞下。在https://eclipse.org/paho/的 Eclipse Paho 项目中有客户端库。

于 2017-01-20T07:35:44.970 回答
1

基于 TCP/IP 的消息队列 (MQ)/面向消息的中间件 (MOM) 解决方案应该可以满足您的需求。大多数成熟的产品为各种语言提供本地语言绑定。我对 ActiveMQ 很满意,它有一个 CLI 界面,可能足以完成简单的脚本任务。

可以在这里找到一些背景知识: http ://en.wikipedia.org/wiki/Message-orientation_middleware

祝你好运,

香农

于 2009-06-30T21:59:29.497 回答
1

也许我没有抓住重点(完全有可能!),但为什么不只使用 SMTP 并发送电子邮件消息呢?还是 TCP 数据包,并且在另一端有监听程序?

于 2009-05-01T23:29:25.433 回答
1

我知道没有像这样的现成解决方案。

我的建议是您编写脚本,使用 curl 或 wget 将 HTTP POST 请求发送到一个非常简单的 Web 应用程序,其中包含您的信息。另一台机器每隔一段时间轮询同一个网络并获取信息。

Comet可以改善民意调查,但可能需要更多的努力。

于 2009-05-02T00:31:49.467 回答
0

您应该考虑在机器之间桥接 D-Bus 消息。编写一个消息桥应用程序来接收 D-Bus 消息,过滤它们并将某些消息发送到 AMQP 主题交换。这可以使用 RabbitMQ 作为 MQ 代理轻松完成,值得花时间学习 AMQP 模型。RabbitMQ 站点充满了文档、教程、博客和常见问题解答。

AMQP 的一个典型用途是有一个消息生产者进程,然后是一个消息消费者进程,它可以在不同的机器上。生产者只需连接到代理,然后将消息发布到带有路由键标签的主题交换中。Exchange 是 Broker 上的一个进程,用于将消息路由到 Queues。消息消费者也连接到代理,但它可能不是同一个代理。然后消费者声明要使用的队列名称。并使用绑定键将该队列名称绑定到命名的 Exchange。绑定键是一种模式,它与进入交换的任何路由键匹配。在最简单的情况下,路由键和绑定键是相同的,但是当绑定包含通配符模式时会更有趣。

如果你真的不想学习 AMQP,那么使用 0MQ 来桥接机器。0MQ 更简单,基本上允许您拥有具有多个端点的套接字。

于 2011-05-07T18:25:50.697 回答
0

如果您有兴趣尝试较低层的协议,您可以尝试 SOAP。它不如二进制协议高效,您必须自己进行更高级别的排队,但它可以通过网络代理和 SMTP 服务器运行。我之前尝试过一个不错的 PERL 实现。

欲了解更多信息:

http://www.w3schools.com/soap/default.asp

于 2009-05-03T14:00:51.837 回答