2011-08-02 23 views
18

Podemos integrar php, perl, python con apache y compilar sitios en ellos.Cómo usar C++ para el servidor apache

¿También es posible usar C/C++ con Apache y crear sitios web en él?

+7

Técnicamente sí, pero confía en mí: no quieres. – meagar

+3

¿Por qué? Me encanta C++ así que pensé ¿por qué no empezar a usarlo también para sitios web? –

+2

@meagar y todos los viandantes, ¿por qué? – Rookie

Respuesta

12

Funciona.

Puede hacer cosas básicas usando CGI: para cada solicitud a una dirección en su sitio, Apache comienza un nuevo proceso con un ejecutable dado. Este ejecutable puede ser C++. La desventaja es que se crea un nuevo proceso para cada solicitud. Para obtener mejores resultados, puede usar FastCGI, donde el proceso CGI se puede ejecutar para varias solicitudes diferentes.

Para sitios avanzados (leer web 2.0) en C++, eche un vistazo a Wt.

+5

Está escrito solo en la última línea de esta respuesta, pero el marco "Wt" es la clave. ¡Míralo, es realmente bueno! – Offirmo

+0

De acuerdo con esta página web CGI realiza el peor. Pero un módulo de Apache (vea la respuesta de SAPI en este hilo sale arriba). http://wso2.com/library/articles/high-performance-web-services-c/ –

0

Algunas de las opciones son: (Rápido) CGI, escribiendo un Apache module o utilizando algún marco de un mayor nivel C++ que funciona con Apache.

4

Si desea codificar un sitio web, realmente desea una biblioteca bastante profunda, que todos esos "otros" idiomas proporcionan de la caja. Si usa Apache para la mayoría de esa funcionalidad, C++ no es la mejor opción.

Si todavía te sientes aventurero y quieres usar C++ para crear tu propio servidor web personalizado, prueba boost::asio. Se proporciona un example http server que analizará las solicitudes como rutas y devolverá archivos html del sistema de archivos.

Pro: Nada más que C o ensamblador coincidirá con el control de bajo nivel que obtiene con C++. Por ejemplo, mi servidor web maneja una API RESTful muy específica, y nada más.

Con: Más que un soporte de biblioteca profundo, trabajará mucho por su cuenta, así que prepárese para eso. Por ejemplo, acabo de agregar Autenticación básica: tuve que buscar los RFC HTTP apropiados, codificar mi propio encabezado Básico y soltar la codificación Base64 para codificar el nombre de usuario y la contraseña. Pero me gusta eso, sé exactamente lo que está pasando hasta el último byte.

15

Existen tres soluciones: Cgi, Fastcgi, SAPI. Explicaré el último.

Server Application Programming Interface (SAPI) es el término genérico que se utiliza para designar interfaces de módulo directo para aplicaciones de servidor web como Apache HTTP Server, Microsoft IIS o iPlanet.

En otras palabras, puede escribir una biblioteca C/C++ (no una biblioteca "real", solo un archivo) que cargue su servidor web. Explicaré cómo se puede hacer esto con Apache2 en Linux:

0. requisitos previos: Apache2, Linux, acceso a la línea de comandos.

1. Obtener apxs2, que compila y genera un módulo compatible Apache 2 (.so archivo) de la C/C++ archivo automáticamente. La forma más fácil de obtener que en Ubuntu/Debian es sudo apt-get install apache2-threaded-dev

2. Escribe tu C/C++ código como se explica en the official guide. Alternativamente, puede generar automáticamente un código de muestra rápidamente con: apxs2 -g -n sample.Esto producirá varios archivos, el único de interés es mod_sample.c

3. Compilar:

apxs2 -a -c mod_sample.c 

Si usted ha escrito su propio archivo, modificar mod_sample.c en consecuencia. El .so resultante es compatible con Apache2 y se almacenará en su directorio de módulos de Apache.

4. Apache Tell para cargar el módulo modificando y añadiendo /etc/apache2/apache2.conf:

LoadModule poc_rest_module /usr/lib/apache2/modules/mod_poc_rest.so 
<Location /poc_rest> 
    SetHandler poc_rest 
</Location> 

Sus caminos puede ser diferente (/etc... y /usr/lib...) dependiendo de la configuración de distribuciones e instalación. También tenga en cuenta que poc_rest_module es solo el nombre del módulo y puede modificarse. Finalmente, tenga en cuenta que en este ejemplo, se llamará al módulo solo cuando uno navegue a example.com/poc_rest.

5. reinicie Apache para volver a cargar la configuración: sudo service apache2 restart.

+0

¡Gracias por la respuesta! Necesitaba escribir algo de C++ y ejecutarlo en proceso con el servidor HTTP, y esta es la única respuesta que resuelve ambas preocupaciones. Sin embargo, la guía oficial a la que se vinculó no discute nada de C++. Tengo problemas para que funcione, y he abierto una pregunta [aquí] (http://stackoverflow.com/q/42605138/791604) detallando mi intento; si has hecho con éxito un módulo C++ antes, me encantaría tu opinión sobre lo que he hecho mal. –

+0

debe ser una respuesta aceptada, agradable, +1000 –

+0

Solo necesita decir cómo decirle a apache qué extensiones de archivo deben ser analizadas por el módulo cargado. Además, no explicó cómo debe ser la interfaz C++/Apache. –

0

Una de las mejores opciones es usar SWIG para generar PHP o el módulo Perl para Apache. De esta forma, uno puede directamente relacionar la clase C++ o el método C/C++ o variable con PHP y acceder desde el servidor web. En este ejemplo, mueven parte computacionalmente difícil en la biblioteca dinámica de C++ http://novorado.com/2014/12/custom-c-module-for-apache-web-server/

0

Después de leer todas las respuestas, encontré una idea fácil para usar C++ en vez de PHP/Python/Perl.

Para hacer el argumento, usaré la sintaxis y las convenciones de PHP.

La extensión de Php está escrita en C/C++ y está compilada. Entonces, en lugar de perder el tiempo creando un puente entre el servidor de aplicaciones para el usuario y nuestro código C, simplemente escribimos toda la lógica del sitio web en C y la convertimos en una extensión de PHP o en una biblioteca de Python/Perl. Como cualquier cuerpo usará C/C++ en lugar de PHP/Python/Perl para mejorar la velocidad, esta solución es una buena opción.

Nuestro código PHP simplemente llamará a una función iniciadora expuesta por nuestro código C, empaquetada como una extensión.

Esto no solo es una alternativa, sino que también evitará que los aficionados agreguen errores no deseados mientras exponen su código C directamente a Apache.

Cuestiones relacionadas