创建与nginx通信的c ++应用程序的最佳方法

Viv*_*oel 35 c++ fastcgi http nginx node.js

我需要编写一个C++接口,它可以读取我们的数据结构,并使用http协议提供基于查询的o/p.

服务器需求
它应该能够同时为100个客户端服务.

为什么选择C++
所有代码都是用C++编写的.所以我们需要在C++中编写一个http层.这就是我选择C++而不是更传统的网络编程语言的原因.

我想使用nginx来提供静态文件并使用它的代理传递来与C++通信.

我找到了两种方法:

  • 编写FastCGI c ++模块.

  • 编写node.js c ++模块.

  • 如果你有任何其他建议,请另外提出

您能否根据以往的经验列出每种方法的优缺点?

Chr*_*ith 18

这里没有人似乎已经解决了实际问题,尽管已经提供了一些很好的解决方案.我已经能够为nginx构建C++模块,只需进行一些小的更改.

  1. 将模块源文件名更改为以.cpp结尾,以便gcc意识到它正在处理C++.
  2. 确保所有nginx包含(例如ngx_config.h,ngx_core.h等)都包含extern"C"{}结构.同样,确保通过包装器声明通过nginx函数指针调用的任何函数.
  3. 在设置nginx时,将--with-ld-opt =" - lstdc ++"添加到"configure"调用中.

通过这三个步骤,您的模块应该编译,构建,链接和实际工作.

  • 克里斯托弗,你有一个简单的骨架吗?好奇而已 (4认同)

Viv*_*oel 12

我想我将继续推进Nginx模块开发http://www.evanmiller.org/nginx-modules-guide.html

为什么?

  1. 它不需要任何其他库依赖,如fastcgi和其他.
  2. 我可以在我的模块中使用nginx的所有功能.

  • 听起来不错.只是想知道你是否取得了成功.如果是这样,我可能会按照你的路径自己编写模块.您对其模块API的总体印象是什么? (3认同)

Kim*_*meh 10

您要问的基本上是如何将包含数据结构的c ++进程转换为Web服务器.这可能不是最佳方式.(然后,也许它就是你的情况.这取决于你想要暴露的c ++进程接口的复杂性.)

无论如何,我会尝试在c ++进程和可以执行http工作的客户端之间使用一个小的http前端,并使用一些简单的消息传递协议(如ZeroMQ/zmq)与c ++后端进程通信.

c/c ++中的zmq非常简单,而且效率非常高.使用zmq,您可以非常快速地在python中设置一个简单的Web服务器前端,或者您喜欢的具有zmq绑定的任何语言,并且使用zmq使该前端与后端c ++进程异步或同步地进行通信.

C++的例子指导是很好的出发点,如果你正在寻找到使用ZMQ.

对于Node.js,还有一些例子.

  • 当您可以将套接字添加到主应用程序并自己提供 http 服务时,为什么要使用 python 编写 Web 服务器并使用套接字连接到它呢? (2认同)

小智 5

尝试G-WAN,它允许您直接使用您的c ++应用程序.

  • IMO,总是有助于了解更多替代方案. (3认同)