【问题标题】:Is there any opensource high-performance IPC-like msg bus library in c++?c++中有没有开源高性能的类似IPC的消息总线库?
【发布时间】:2009-12-01 16:13:20
【问题描述】:

在我当前的项目中,我有一个稍微分散的架构,即多个可执行文件相互协作以完成工作。为了让事情变得更容易,我希望我可以有一个可靠的“骨干”消息总线:当一个可执行文件连接到 msg 总线时,它可以在新的 msg 到达时接收回调。同样,它可以向总线发布新消息。

我知道有些公司提供这样的现成解决方案,但是,OSS 中有免费的吗?

【问题讨论】:

  • 那是什么环境和用例? 稍微分布是什么意思?
  • 基本上有2个exe,一个是数据发布者,一个是接收者。然而,让事情变得更复杂的是,在接收器内部还需要一个 msg 总线,以便一个对象可以向其他对象发布数据/信号。我更喜欢为这 2 个用例使用一个单一的 msg 总线,而不是使用其中的 2 个。

标签: c++ ipc


【解决方案1】:

如果您不需要 Windows 支持,并且您的进程没有分布在不同的计算机上,我肯定会给 D-Bus 看看。

它是用 C 语言编写的,并且功能(根据网页)为“Qt、GLib、Java、C#、Python 等)绑定。

list of projects using D-Bus 也令人印象深刻。

【讨论】:

  • 我不记得 D-Bus 是高性能的......还是在去年发生了翻天覆地的变化?
  • 看来WinDbus,windows端口也落后了,这就是为什么我从来没有尝试在我的开发中集成D-Bus
【解决方案2】:

您是否考虑过使用基于 RabbitMQ 之类的 AMQP?

Cbinding 有一些库,你可以为 C++ “装扮”。

RabbitMQ 是一个完整且高度 可靠的企业消息系统 基于新兴的 AMQP 标准。它是根据 开源 Mozilla 公共许可证和 具有平台中立分布, 加上特定于平台的包和 易于安装的捆绑包。


当然,如果您需要“较少分布”的东西,您可以直接使用 DBus。

【讨论】:

    【解决方案3】:

    除了给出的答案之外,Boost.Interprocess 应该是一种可移植且高性能的替代方案。
    不过,如果您真的在寻找高性能,那么也请放弃使用 IPC 库进行进程内通信的想法 - 会有性能损失。

    【讨论】:

    • 为了共享内存而报废?
    • 那是关于进程内通信,不需要共享内存或其他 IPC 机制。
    【解决方案4】:

    与上面的 AMQP 想法类似,您可能想查看 ZeroMQ (http://www.zeromq.org/)。我没有亲自使用过,但我认识一些非常喜欢它的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-08
      • 1970-01-01
      • 2010-09-08
      • 1970-01-01
      • 1970-01-01
      • 2014-09-03
      • 2019-07-18
      相关资源
      最近更新 更多