将数据从Django传递到c++应用程序并返回

Passing data from Django to C++ application and back

本文关键字:c++ 应用程序 返回 数据 Django      更新时间:2023-10-16

我们正在创建一个交易应用程序,其中后端完全是c++(使用QuickFix引擎)。我们想在这个后端之上用Django构建一个web应用程序,用户可以在其中下订单。Django (python)和c++应用程序都将运行在它们自己的进程和地址空间中。你认为将命令/消息从Django传递到c++的最好方法是什么?

另外,这是一个交易应用程序,所以延迟是最大的问题。所以,我不想把订单从Django中放入数据库,然后从c++应用程序中获取。

我目前正在考虑通过共享内存或其他IPC机制进行操作。这是个好主意吗?

你必须使用一些IPC方法。这里没有提到的一个问题是让c++进程监听套接字。这将增加灵活性(以轻微的速度成本),进程甚至不需要在同一台机器上。

我一直在做类似的事情,来自c++,但想用python写UX。我的计算后端是c++,我为UX编译了一个python模块并使用flask生成html。我的c++和python生活在同一个过程中,所以我还没有在实践中解决你的核心问题。

我给你的一个建议是把所有IPC的东西都用c++写,用Boost.Python用c++写一个小的python模块。这将让python进程在python世界中完成95%的工作,但给你一个位级的信心,我想作为一个c++开发人员,为你发送到c++的数据。提振。对我来说,Python使连接c++和Python web框架变得轻而易举。

您必须提出一个现有的协议或创建您自己的协议,以允许c++和Python之间的通信。我认为最简单的方法是使用一些IPC,如zero - Ice或CORBA。或者,你可以在Python中加入本地c++代码,然后在Django中使用它,这也可以使用QuickFIX。

如果你真的关心延迟(至少毫秒很重要,而不是纳秒)-你根本不应该使用QuickFIX或Python。

我将使用zeromq作为IPC

我可能会选择JSON-RPC之类的东西,并通过本地套接字或命名管道进行通信。

共享内存更快,但如果你必须自己做的话,要正确处理就更难了(这意味着并发性和锁定,在我看来,应该尽可能避免。)

这取决于消息大小和延迟需求。你也可以尝试一种可以在共享内存上工作的IPC机制,就像vlad在下面的评论中提到的那样。

(请注意,如果将来需要对系统进行集群,那么拥有一个可以依赖于管道/套接字的ipc系统可能是一件好事)。

你应该/可以使用带有消息代理的微服务架构,这样你就可以轻松地将你的应用程序彼此连接起来。