2009-12-01 51 views
3

在我目前的項目中,我有一個稍微分散的體系結構,即多個可執行文件相互協作完成任務。爲了使事情更容易,我希望我可以有一個可靠的'主幹'消息總線:當一個可執行程序掛接到消息總線時,它可以在新消息到達時接收回調。同樣,它可以向公共汽車發佈新消息。在C++中是否有任何開源的高性能IPC類msg總線庫?

我知道有些公司提供的現成的商用解決方案這樣的,但是,有沒有在OSS任何免費的嗎?

+0

什麼環境和用例是? *略*分佈意味着什麼? – 2009-12-01 16:43:51

+0

基本上,有2個exe,一個是數據發佈者,另一個是接收者。然而,讓事情更復雜一點的是,在接收器內部還需要一個msg總線,以便一個對象可以將數據/信號發佈到其他對象。 我寧願爲這兩個用例使用一個單一的msg總線,而不是其中的兩個。 – 2009-12-02 13:26:39

回答

3

你有沒有想過使用像RabbitMQ這樣的AMQP?

有一些庫爲Cbinding你可以「打扮」爲C++。

RabbitMQ的是一個完整的,基於新興AMQP標準 高度 可靠的企業消息系統 。它是 開源的Mozilla公共許可證和 有一個平臺中立的分佈, 加上特定平臺的軟件包和 捆綁,易於安裝。


當然,如果你需要的東西「分佈式少」,你可以直接去使用的DBus。

4

如果您不需要Windows的支持,你的進程不會分散在不同的計算機上,我肯定給D-Bus看看。

它是用C語言編寫的功能(根據網頁)綁定 「的Qt,油嘴,Java和C#,Python等)」。

list of projects using D-Bus也相當不錯。

+0

我不記得D-Bus是高性能的......還是在去年激烈地改變了一些東西? – 2009-12-01 16:42:19

+0

它似乎也WinDbus,Windows端口落後於此,這就是爲什麼我從來沒有試圖在我的發展中集成D-Bus – 2009-12-01 17:51:11

1

除了給出答案,Boost.Interprocess應該是便攜和高性能的替代方案。
如果您真的在尋找高性能,那麼也可以放棄使用IPC庫進行進程間通信的想法 - 這會導致性能損失。

+0

廢棄有利於共享內存? – 2014-08-01 04:36:01

+0

這是關於進程間通信,沒有共享內存或其他需要的IPC機制。 – 2014-08-04 09:44:12

0

上述AMQP的想法類似,您可能想看看ZeroMQ(http://www.zeromq.org/)。我沒有親自使用它,但我知道很多人喜歡它。

相關問題