如何在C++服务器应用程序和Django Web应用程序之间进行通信

4

我有一些用C++编写的特定任务框架和一个基于Django的Web应用程序。想法是启动此框架,从中接收一些数据,发送一些数据或请求并在某个时间段内检查其状态。

我正在寻找最佳通信方式。两个应用程序都在同一服务器上运行。我在想,C++中的JSON服务器是否是一个好主意。Django将向该服务器发送请求,服务器将解析它,并委派一个工作线程来完成任务。几乎所有需要发送的数据都类似于字符串。其他数据将存储在数据库中,因此没有问题。

JSON是一个好主意吗?也许您知道一些更好的C++和Django之间的本地通信机制?


好的。我们能做什么?我不明白你在问什么。 - Leri
我正在寻找最好的通信方式。Json是我知道的唯一方式。我请求您的建议或其他想法。 - eclipse
2个回答

5

JSON似乎是数据序列化的一个不错的选择 - 它擅长处理字符串,并且已经存在用于在Python和C++中编码/解码JSON的库。

然而,我认为您更大的问题可能是用于在客户端和服务器之间传输JSON的传输协议。以下是一些选项:

您可以将HTTP服务器构建到C++应用程序中(我认为这可能是您在问题中所说的“JSON服务器”),这将工作得很好,但除非您获得一个处理繁重工作的库,否则可能会有些棘手。

另一个选择可能是使用0MQ库在客户端和服务器之间发送JSON(或其他)消息。我认为这可能比实现完整的HTTP服务器要容易得多,而且0MQ具有一些进程间通信代码,可能比通过网络发送东西要快得多。

第三个选项只是将C++作为独立应用程序运行,并通过stdin或命令行参数将数据传递给它。这可能是最简单的方法,但可能不是最灵活的方法。如果您采用这种方式,您可能最好像ablm建议的那样构建Python/C++绑定。

或者,您可以尝试基于Redis或其他数据库系统构建某种作业队列。这个想法是您的Django应用程序将描述作业的一些JSON放入作业队列中,然后C++应用程序可以定期轮询队列,并使用单独的Redis条目将结果传回客户端。这可能具有优点,即您可以以最小的努力拥有几个“工作者”从作业队列中读取。

肯定还有其他方法可供选择,但这些是我立刻想到的方法。


5
如果您的要求是保证C++应用程序始终在与Django Web应用程序相同的机器上,那么将C++代码转换为共享库并用Python进行包装,然后将其包含进来。就像这个Calling C/C++ from python?
如果您需要进行远程调用并且代码需要在不同机器之间通信,那么JSON和其他序列化方式就有了意义。

你说得对。JSON 只会产生问题,需要进行解析。我将使用 Boost::Python 从 Django 调用 C++。 - eclipse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接