2012-08-27 75 views
3

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

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

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

+0

好的。我们可以做什么?我不明白你在问什么。 – Leri

+0

“我正在寻找最佳沟通方式。” Json是我知道的唯一途径。我问你的建议或其他想法。 – eclipse

回答

2

如果你的要求是保证始终在同一台机器作为Django Web应用程序的应用C++,通过将其转换成它周围的共享库和包裹蟒蛇包括C++代码。就这样Calling C/C++ from python?

JSON和其他序列化意义,如果你打算做远程调用和代码需要跨机器进行通信。

+0

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

3

JSON对于数据序列化来说似乎是一个足够公平的选择 - 它非常擅长处理字符串,并且在PythonC++中都有编码/解码JSON的现有库。

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

你可以在你的C++应用程序中建立一个HTTP服务器(我认为你的问题可能是你的意思是“JSON服务器”),它可以正常工作,虽然可能有点痛苦除非你掌握一个图书馆来处理你的辛苦工作。

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

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

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

几乎可以肯定有其他一些方法去做,但那些是立即想到的那些。

相关问题