分布式进程异步通信的最佳方法是什么?

时间:2009-03-11 00:41:21

标签: c++ sockets messaging

我正在开发一个应用程序,其中分布式组件通过网络以异步,发布/子方式相互通信。

为此,我喜欢通过套接字发送XML的想法 - 它是异步的,我不需要任何类型的服务器,它可以在本地或通过网络工作。我将不得不推出自己的发布/订阅机制,这可能不会太繁重 - 我可以使用IP地址作为订阅者的ID。实现语言将是C ++。我之前使用过这种方法效果很好。但是,我想知道是否有更好的方法?欢迎任何建议。

编辑:我还没有做出决定,但我对cparcode对protobuf的评论感兴趣:

“我从未理解使用XML进行网络通信的普及。无论如何,我意识到协议只是你问题的一部分,但在这个问题上,还有Google的protobuf:http://code.google.com/p/protobuf/ - caparcode(3月11日)在1:01)“

8 个答案:

答案 0 :(得分:3)

最好使用现有的消息传递框架,而不是使用XML。请查看libt2nd-bus

但是你过去使用过自己的套接字实现效果很好我没有看到你应该改变的原因。如果没有破坏,请不要修理它:)

答案 1 :(得分:1)

您可以consider a solution like AMQP而不仅仅是直插座。

当您谈论为pub / sub接口使用套接字连接时,这通常意味着点对点通信,这并不总是可扩展的解决方案。 AMQP真正解决了这种发布/子问题。它是免费的,它是开源的,它可以工作。

鉴于他们已经解决了pub / sub问题,你可能想要利用他们的工作而不是自己做。

我建议OpenAMQ.

话虽如此,它实际上取决于您正在使用的环境.AMQP要求AMQP代理(负责路由消息的应用程序)在系统中的某个位置运行。

答案 2 :(得分:1)

看看ActiveMQ。它是一个JMS提供程序,并且还有许多其他语言的绑定,可以在多个传输上运行,并且可以选择用于其消息的协议。

答案 3 :(得分:1)

RabbitMQ也是一个AMQP代理,它支持其他协议,如XMPP,HTTP,STOMP,SMTP以及使用适配器。

答案 4 :(得分:0)

特别是如果你以前做过,它仍然满足你的需求,坚持下去。

答案 5 :(得分:0)

如何在您的应用中嵌入网络服务器? EasyHTTPD是开源的,C ++,并且使用起来非常简单。异步部分很简单。您可以在发件人或接收者上启动新线程。

答案 6 :(得分:0)

如果您正在寻找XML和跨平台引导,您可以考虑使用像SOAP这样的XML-RPC机制(我已经使用gSoap在Linux上的C服务器与win32上的C ++客户端之间进行通信,以及一旦你弄明白,它就能正常工作。)

答案 7 :(得分:0)

如果您不是非常倾向于使用XML而且想要简单有效的事情,那么请考虑查看YAMI库。它使用起来相当简单,给定的链接包含足够的文档,基本原理和示例,以便开始使用。