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

时间:2012-08-27 11:01:16

标签: c++ python django json

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

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

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

2 个答案:

答案 0 :(得分:3)

JSON似乎是数据序列化的一个公平选择 - 它擅长处理字符串,并且现有的库用于在python和&amp ;;中编码/解码JSON。 C ++。

但是,我认为您的更大问题可能是您用于在客户端和服务器之间传输JSON的传输协议。这里有一些选择:

你可以在你的C ++应用程序中构建一个HTTP服务器(我认为你的问题可能就是你所说的“JSON服务器”),这样可以正常工作,但除非你得到,否则可能会有点痛苦。一个图书馆,为你处理艰苦的工作。

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

第三种选择就是将C ++作为独立应用程序运行,并通过stdin或命令行参数将数据传递给它。这可能是最简单的做事方式,尽管可能不是最灵活的方式。如果你这样做,你可能最好只建立一个ablm建议的Python / C ++绑定。

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

几乎肯定还有其他一些方法可以解决这个问题,但这些方法会立即浮现在脑海中。

答案 1 :(得分:2)

如果保证您的要求始终与C++ Web应用程序在同一台计算机上具有Django应用程序,请通过将其转换为共享库并包装python来包含C++代码周围。就像这个Calling C/C++ from python?

一样

如果您要进行远程调用并且代码需要跨机器进行通信,则JSON和其他序列化是有意义的。