2012-01-31 23 views
29

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.Mejor método para crear una aplicación C++ para comunicarse con nginx

Servidor Necesita
Debe ser capaz de servir 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 nodo.js C++.

  • Por favor, cualquier otra sugerencia si tiene

¿Puede usted por favor enumerar los pros y los contras de cada método basado en la experiencia previa?

+0

Es posible que desee cambiar la redacción de la pregunta. Cuál es el "mejor" probablemente involucre muchas opiniones. –

+0

Usted dice "100 clientes al mismo tiempo". ¿Realmente necesita que las 100 conexiones se superpongan, o está buscando algún flujo específico (por ejemplo, 100 "transacciones" por segundo)? Si tiene conexiones largas (a diferencia de los ciclos HTTP generalmente cortos), esto puede influir mucho en la respuesta. –

+0

bien, estoy pensando en el título de la pregunta. ¿Lo cambiará si lo encuentra? ¿Puede sugerir uno? –

Respuesta

9

Creo que voy a seguir adelante con el módulo de Nginx devlopment http://www.evanmiller.org/nginx-modules-guide.html

¿Por qué?

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

¿Cómo te besaste con esto? – Homer6

+0

@ Homer6 La única razón por la que elegí el módulo nginx para desarrollo fue que no necesito ninguna tercera lib. –

+3

Suena bien. Solo me preguntaba si tuviste éxito con eso. Si es así, puedo seguir tu camino y escribir el módulo yo también. ¿Cuál fue su impresión general de su módulo API? – Homer6

9

Lo que se está preguntando es básicamente cómo convertir el proceso C++ que mantiene sus 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á tratando de exponer, supongo).

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

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

El c++ examples y the guide son buenos puntos de partida si está buscando usar zmq.

Para Node.js también hay a few examples.

+1

lo siento, olvide marcar que estoy buscando una licencia no pagada. –

+2

ZeroMQ es gratis. –

4

tratar G-WAN

puede utilizar su aplicación en C++ directamente, y G-WAN es rápido como el infierno, más rápido que nginx.

+0

No debe responder a las preguntas anteriores si su respuesta no agrega nada a las respuestas ya aceptadas. – alestanis

+2

IMO, siempre útil para ver más alternativas. –

+1

G-WAN no es más rápido que Nginx. – Alice

17

Nadie aquí parece haber abordado la pregunta real, aunque se han ofrecido algunos buenos resultados. He podido construir módulos C++ para nginx con un par de cambios menores.

  1. Cambie el nombre del archivo de origen del módulo para finalizar con .cpp, por lo que gcc se da cuenta de que se trata de C++.
  2. Asegúrate de que todo tu 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 estos tres pasos, su módulo debe compilar, construir, vincular y realmente funcionar.

+2

Christopher, ¿tienes un esqueleto simple para eso? Sólo curiosidad – gubble

+1

Gracias. Esta debería ser la respuesta aceptada (imo). –

Cuestiones relacionadas