6

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

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

我目前正在考虑通过共享内存或其他一些 IPC 机制来实现。这是一个好主意吗?

4

4 回答 4

2

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

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

我要给出的一条建议是将所有 IPC 内容保留在 C++ 中,并使用 Boost.Python 在 C++ 中编写一个小型 python 模块。这将让 python 进程在 pythony 世界中完成 95% 的工作,但会给你作为 C++ 开发人员想要的位级别的信心来处理你发送到 C++ 的数据。Boost.Python 使桥接 C++ 和 python web 框架对我来说变得轻而易举。

于 2011-09-01T19:13:39.577 回答
1

我会为 IPC使用zeromq

于 2011-09-01T19:24:54.247 回答
1

你必须想出一个现有的协议或创建你自己的协议来允许 C++ 和 Python 之间的通信。我认为最简单的方法是使用诸如ZeroC IceCORBA之类的 IPC 。或者,您可以将本机 C++ 代码放入 Python并使用 Django 中的代码,也可以使用 QuickFIX。

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

于 2011-09-01T19:07:26.323 回答
0

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

共享内存更快,但如果您必须自己做,则更难正确(这意味着并发和锁定,IMO,如果可能的话,应该避免。)

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

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

于 2011-09-01T19:08:33.843 回答