Pregunta El mejor método para crear una aplicación de C ++ para comunicarse con nginx


Necesito escribir una interfaz C ++ que pueda leer nuestra estructura de datos y proporcionar la o / p basada en la consulta mediante el protocolo http.

Necesidad del servidor
Debería poder atender a 100 clientes al mismo tiempo.

Por qué C ++
Todo el código ya está escrito en C ++. Entonces, necesitamos simplemente escribir una capa http en C ++. Es por eso que estoy eligiendo C ++ en lugar de un lenguaje de programación web más convencional.

Estoy pensando en usar nginx para servir archivos estáticos y usar su pase de proxy para comunicarse con C ++.

Hay dos enfoques que he encontrado:

  • Escribir un módulo FastCGI c ++.

  • Escriba un módulo node de node.js.

  • Por favor, cualquier otra sugerencia si tiene

¿Puede enumerar los pros y los contras de cada método según la experiencia previa?


32
2018-01-31 17:14


origen


Respuestas:


Nadie aquí parece haber abordado la cuestión real, aunque se han ofrecido algunas buenas soluciones. He podido construir módulos C ++ para nginx con un par de cambios menores.

  1. Cambia el nombre del archivo fuente del módulo para terminar con .cpp, por lo que gcc se da cuenta de que se trata de C ++.
  2. Asegúrese de que todo su nginx incluye (por ejemplo, ngx_config.h, ngx_core.h, etc.) están envueltos con una estructura externa "C" {}. Del mismo modo, asegúrese de que todas las funciones llamadas a través de punteros de función nginx se declaren con un contenedor.
  3. Agregue --with-ld-opt = "- lstdc ++" a su invocación de "configuración" al configurar nginx.

Con esos tres pasos, su módulo debería compilar, construir, vincular y, de hecho, funcionar.


18
2018-04-21 01:23



Lo que estás preguntando es básicamente cómo convertir el proceso c ++ que mantiene tus estructuras de datos en un servidor web. Esa podría no ser la mejor manera de hacerlo. (Por otra parte, tal vez sea en su situación. Depende de la complejidad de las interfaces del proceso de c ++ que está intentando exponer, supongo).

De todos modos, trataría de incluir una pequeña interfaz http entre el proceso c ++ y los clientes que podrían hacer el trabajo http y comunicarse con el proceso backend c ++ usando algún protocolo simple de mensajería como ZeroMQ / zmq.

zmq en c / c ++ es bastante directo, y es muy eficiente y muy rápido. Con zmq, puede configurar rápidamente un interfaz simple de servidor web en python, o el idioma que prefiera que tenga enlaces zmq, y hacer que esa interfaz se comunique de manera asincrónica o sincrónica con el proceso backend c ++ utilizando zmq.

los ejemplos de c ++ y la guía son buenos puntos de partida si estás buscando usar zmq.

Para Node.js también hay Algunos ejemplos.


10
2018-02-11 11:01



Creo que seguiré adelante con el desarrollo del módulo Nginx http://www.evanmiller.org/nginx-modules-guide.html 

Por qué ?

  1. No requiere ninguna otra dependencia de biblioteca como fastcgi y otro.
  2. Puedo usar todas las características de nginx dentro de mi módulo.

10
2018-02-16 04:29



Pruebe G-WAN, le permite usar su aplicación de C ++ directamente.


5
2018-06-14 23:46