Me gustaría entrar en el desarrollo web usando C ++ como el "lenguaje de programación" en el lado del servidor. La infraestructura de mi servidor está basada en * nix, por lo que el desarrollo web en C ++ en Azure no es aplicable y C ++ / CLI ASP.NET tampoco es aplicable.
Aparte de las aplicaciones CGI heredadas, ¿se puede realizar el desarrollo web con C ++?
web-development
c++
Scott Davies
fuente
fuente
,
se.
redirige a una toma de corriente.Respuestas:
Absolutamente.
Incluso hay varios marcos para desarrollarlos, incluidos Wt , cppcms , CSP y otros. La implementación principal de FastCGI está en C y admite directamente varios lenguajes , incluido C ++.
Cualquier lenguaje de programación que pueda analizar cadenas puede usarse en CGI o un servlet. Cualquier lenguaje que pueda implementar enlaces con bibliotecas C también se puede usar para desarrollar módulos para servidores compatibles con ISAPI o Apache.
No es particularmente fácil en C ++, y los buenos motores de plantillas son pocos y distantes entre sí, pero se puede hacer.
Por supuesto, la cuestión de si es una buena idea es algo completamente distinto. :)
Tenga en cuenta: los principales sitios web como Amazon.com, eBay y Google usan C ++ para partes de su infraestructura. Sin embargo, tenga en cuenta que Google solo usa C ++ para sistemas críticos para la velocidad, y Amazon.com solo recientemente se alejó de Lisp (lo que enfureció a algunos de sus altos funcionarios :).
Facebook compiló anteriormente PHP a C ++, pero su compilador HipHop (escrito en parte en C ++) se ha modificado como una máquina virtual de código de bytes.
fuente
Por qué no?
El sitio de citas OkCupid se crea con C ++. Probablemente hay otros ejemplos.
También hay un kit de herramientas inspirado en Qt para desarrollar aplicaciones web con C ++ llamado Wt .
fuente
Si planea escribir su aplicación web en C ++, sería un desperdicio total interactuar como CGI.
Mi sugerencia sería construirlo de forma asíncrona utilizando ASIO (E / S asíncrona). Con eso, puede crear un servicio web increíblemente rápido (combine con nginx como un servidor de proxy inverso y estadísticas para obtener los mejores efectos); Combine eso con la biblioteca de plantillas como Wt y estará listo para atender decenas de miles de solicitudes por segundo desde un único servidor.
Si esta es una alternativa práctica al marco web de lenguaje dinámico es otro tema.
fuente
La respuesta corta es que CUALQUIER COSA puede usarse para escribir una página web, siempre que pueda leer la entrada, escribir una salida interpretable y que el servidor web pueda ejecutarla.
Técnicamente, cualquier lenguaje se puede usar como un script CGI siempre que:
También hay otras formas también. Perl tiene la capacidad de construirse como una envoltura alrededor del código c / c ++, actuando como una capa de interpretación entre los dos (y esto no incluye los módulos perl que están compilados como C).
fuente
Al principio, era bastante común: los primeros sitios web en los que trabajé a fines de la década de 1990 fueron extensiones ISAPI escritas en C ++, y funcionaron bastante bien.
fuente
Parece que Microsoft cree que también puede hacerlo. Echa un vistazo a Casablanca, que es un nuevo conjunto de herramientas para (parece) Azure usando C ++.
fuente
Para PHP, puede escribir sus propias extensiones C / C ++ y obtener buenos beneficios de rendimiento de esa manera. Si tuviera una parte realmente intensiva de la CPU de mi aplicación web, probablemente haría una pequeña biblioteca C ++ que descargó ese procesamiento a la extensión y luego devolvió el resultado al PHP y luego el PHP lo envía al navegador.
La otra cosa que la gente no suele considerar es descargar cierto procesamiento de la CPU al lado del cliente, por ejemplo, JavaScript / jQuery. Si tengo un servidor web, es posible que necesite una CPU de 3 GHz para realizar un procesamiento intensivo de la CPU para una función en particular (tal vez algún procesamiento de datos). Mi empresa paga dinero por ese servidor cada mes para mantenerlo en funcionamiento. Si deseo ampliar las operaciones para 100 usuarios concurrentes que ejecutan esa tarea intensiva de CPU al mismo tiempo, entonces tal vez necesito varias CPU y servidores, lo que aumenta el costo para mi negocio. Si descargo esa tarea intensiva de la CPU al lado del cliente, entonces cada usuario que visita el sitio web puede hacer su propio procesamiento de los datos y no tengo que aumentar la capacidad de mi servidor, por lo tanto, me ahorra dinero.
Después de todo, con todo el poder colectivo de más de 100 computadoras de escritorio / tabletas / móviles que realizan el procesamiento por usted, eso es mucho más poder que su servidor ubicado en un centro de datos en algún lugar que le cuesta dinero a su negocio cada mes para seguir funcionando. Potencialmente, todo lo que su servidor estaría haciendo sería recuperar datos de la base de datos, servir contenido y un poco de procesamiento previo / posterior y validación de los datos antes de almacenarlos nuevamente en la base de datos. Obviamente, no haría que el código del lado del cliente fuera demasiado intensivo para la CPU, lo que podría bloquear / congelar la interfaz de usuario del navegador web, podría disparar una solicitud AJAX al servidor, recuperar los datos y luego procesar los datos asincrónicamente del lado del cliente, dejando la web -Interfaz de navegador completamente utilizable.
fuente
Sí, se puede usar. Los otros han mencionado varios enfoques. Aquí está mi propio enfoque. La ventaja es que es totalmente portátil y autónomo, todas las bibliotecas seleccionadas solo dependen de ANSI C. La configuración solo requiere el kernel de Linux y un compilador de C (y las cosas obvias como Busybox, bash, etc.) (o Windows y un compilador), no se necesitan bibliotecas adicionales, ni grandes instalaciones sofisticadas.
El resultado es un único programa que es a la vez un servidor web y un generador de páginas dinámicas (Sustituye "apache" y "php"), también tendrá acceso a la base de datos a través de sqlite.
Bibliotecas utilizadas:
createElement
El resto de esta respuesta es una guía de configuración completa para Linux. Tanto SQlite como MiniXML son opcionales, pero la guía cubre la instalación completa. Depende de usted comentar las partes no necesarias si está interesado en deshabilitar sqlite o MiniXML.
1. Descargue las 3 bibliotecas
2. Prepare su carpeta
sqlite3.c , sqlite3.h
mongoose.c , mongoose.h
mxml.h
3. Compilar mxml
Es posible que haya notado que falta mxml.c, esto se debe a que necesitamos crear una biblioteca estática de mxml. Vaya a la carpeta donde se descargó el mxml tar.gz y realice:
Una vez finalizada la compilación, se generarán muchos archivos, el único archivo que nos interesa es
libmxml.a
copiar ese archivo en la carpeta principal.3.1 Doublecheck
Verifique que la carpeta principal tenga lo siguiente:
mongoose.c, mongoose.h
libmxml.a, mxml.h
sqlite.c, sqlite.h
4. main.c
Creemos el programa real, cree un
main.c
archivo en la carpeta principal, aquí hay un esqueleto para que pueda comenzar.Finalmente, compilando!
Vamos a compilar
cd
a su carpeta principal y ejecute estos:Ahora, ejecute server.out con
/server.out
y navegue hastalocalhost:8080/hello
Hecho :)
fuente
Supongo que varios sistemas integrados (por ejemplo, enrutadores, impresoras, ...) tienen algún servidor web controlado por C ++.
En particular, podría usar alguna biblioteca de servidor HTTP como libonion para agregar algunas capacidades web a algún programa C o C ++, o para desarrollar un servidor ligero con alguna interfaz web.
Algunas personas están codificando su servidor web o su interfaz HTTP en Ocaml usando Ocsigen . No todas las cosas web son PHP. Y con FastCGI podría realizar un procesamiento web dinámico en / a su aplicación.
fuente