4

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

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

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

4

2 回答 2

5

如果您的要求保证始终将应用程序与Web 应用C++程序放在同一台机器上,请通过将代码转换为共享库并在其周围包装 python 来包含代码。就像从 python 调用 C/C++ 一样?DjangoC++

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

于 2012-08-27T13:54:28.397 回答
4

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

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

您可以在您的 C++ 应用程序中构建一个 HTTP 服务器(我认为这可能是您在问题中所说的“JSON 服务器”的意思),它可以正常工作,但实现起来可能有点痛苦,除非您掌握为您处理繁重工作的图书馆。

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

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

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

几乎肯定还有其他一些方法可以解决它,但那些是立即浮现在脑海中的那些。

于 2012-08-27T12:00:38.583 回答