保证在C ++和Python之间交付IPC

时间:2015-07-20 19:57:05

标签: ipc zeromq distributed-computing low-latency

我正在构建一个C ++代理,用于为我们的上游Python应用程序转发网络数据包,我正在寻找一种高性能且可靠的解决方案,用于代理和应用程序之间的通信。

从我在互联网上看到的内容来看,从性能角度来看,ZeroMQ似乎是一个很好的解决方案。但它不支持保证交付。只是想知道是否有一个符合我要求的好的IPC库,或者是否有办法以一种hacky方式使用ZeroMQ来避免数据包丢失?

1 个答案:

答案 0 :(得分:1)

没有深入细节,有两个方面:

是的,ZeroMQ将为你提供丰富的一部分,但不要指望它是一个单行(虽然python可能非常接近)。更敏感的实时部分--C ++部分 - 可能是智能且轻量级的,以便在[proxy] - 引擎端获得最少的资源和关注,并且上游python将受益于分离,可以享受所有功能丰富的后处理任务。

性能 - ZeroMQ对于消息传递非常有益。也就是说,人们可能会忘记数据包,而是开始考虑与行为相关的信号,这为开发人员提供了大量的主要工作能力。在下面的所有内容中,人们可能还希望检查另一个来自Martin Sustrik(ZeroMQ的共同父亲)的智能消息传递框架 - 一个nanomsg,可以为您的直接和快速提供更好的信号行为模式{{{ 1}} - 信号项目(猜测所有开发人员都会喜欢in-built FSA engines而不是调整线程/ raw-socks / IPC - 频道)。

可靠性 - ZeroMQ非常强大,适用于异构(许多端口允许任意到任何消息传递,无论是Python,Erlang,C ++,还是内容处理路径),大规模分布,几乎(在所有合理范围内)线性可扩展解决方案。

保证交付是ZeroMQ哲学努力避免的事情(并且所有的智慧都让它可以进入应用程序自己的域进行上下文感知处理)。

深入了解细节,有一个很好的IPC例外:

对于IPC - 传输类,没有丢失内容的地方。如果您在IPC - 传输连接信令通道的两端设置ZeroMQ基础设施,则不会有数据丢失的可能性。您可以使用端点的缓冲区分配/数据操作步骤微调Zero-COPY模式,以便进一步减少更多的用途,您的数据已经存储在内存中,无需复制到它通过IPC传递。

如果在真正的压力下切割更多,请检查nanomsg for going a step farther(代价是没有那么广泛的共同开发的包装纸,这对您上面定义的项目来说没有问题。)