php5 integrar con php c++ python perl fastcgi

integrar - FastCGI C++ vs. Un lenguaje de script(PHP/Python/Perl)



integrar python con html (16)

Bueno ... Ahorrarás memoria y energía de la CPU con C / C ++ vs Python / Perl / Ruby / Java / .NET. Si los recursos guardados con C / C ++ representan una gran fracción de los recursos totales disponibles (un FastCGI que se ejecuta en la placa incorporada de un robot), entonces sí, C / C ++. Si no, ¿por qué molestarse?

¿Cuáles son los altibajos de usar FastCGI C ++ frente a PHP / Python / Perl para hacer el mismo trabajo?

¿Algún rendimiento o fallas de diseño o usar uno sobre el otro? Incluso tus opiniones son bienvenidas. (Dime por qué una u otra roca, o una u otra apesta).


C ++ es un lenguaje fuertemente tipado ... es decir, puede declarar ints, floats, etc ... en general, puede programar más eficientemente que con lenguajes de tipificación débil. Facebook informó una mejora del 50% al cambiar de PHP a C ++. Consideraría que los lenguajes de scripting son lenguajes de creación de prototipos ... cuando desee que la eficiencia del nivel de producción use un lenguaje compilado.


Cada una de mis búsquedas en Google indica que C / C ++ ofrece el mejor rendimiento para aplicaciones web que necesitan funcionalidades, como buscar información en páginas web u obtener información de una base de datos.


Creo que alguien debería ser un pionero en el tema de Webapp / C ++, para probar el terreno y proporcionar soluciones de prueba de concepto.

Con la llegada de STL y el desarrollo del texto de análisis de Boost resultó ser extremadamente fácil con C ++. Hace dos años, si tuviera que analizar datos CSV, usaría Python o PHP. Ahora uso C ++ con STL / Boost. Leyendo el archivo CSV en vectores? No hay problema, simple getline + boost :: split + lexical_cast. ¿Cálculo de suma de datos en un vector de pares? No hay problema:

pair<int, double> sum_int_double(pair<int,double> & total, pair<struct in_addr, pair<int,double> > & a) { total.first += a.second.first; total.second += a.second.second; return total; } pair<int,double> mixedSum = accumulate(mixedVec.begin(), mixedVec.end(), emptyPair, sum_int_double);

¿Transfiriendo datos del mapa al vector de pares? No hay problema:

mixedVec.assign(amap.begin(), amap.end());

Todo está bien definido y agudo. Operaciones con cadenas, expresiones regulares, algoritmos, OOP, etc. todo está bien definido y maduro en C ++. Si su aplicación será como una aplicación real, y no analizará el texto, entonces C ++ también es una buena opción con sus características OOP.


Es probable que el uso de C ++ resulte en una aplicación radicalmente más rápida que PHP, Perl o Python y algo más rápida que C # o Java, a menos que pase la mayor parte del tiempo esperando el DB, en cuyo caso no habrá una diferencia. Este es en realidad el caso más común.

Por otro lado, debido a las razones que Benhoyt mencionó, el desarrollo de una aplicación web en C ++ llevará más tiempo y será más difícil de mantener. Además, es mucho más probable que contenga serios agujeros de seguridad (ahora a todos les preocupa más la inyección de SQL y XSS, pero si escribieran sus aplicaciones web en C ++ serían desbordamientos de búfer y serían sus redes completas las que se desarrollarían en lugar de solo los datos). ).

Y es por eso que casi nadie escribe aplicaciones web en C ++ en estos días.


Hace varios años, aprendí más o menos la programación de aplicaciones web en el trabajo. C era el idioma principal que conocía, así que escribí la aplicación web (bastante a gran escala) en C. Mal error. El manejo de cadenas y memoria de C es tedioso, y junto con mi falta de experiencia en aplicaciones web, rápidamente se convirtió en un proyecto difícil de mantener.

C ++ sería significativamente mejor, principalmente porque std::string es mucho mejor que char* .

Sin embargo, ahora uso Python cada vez (aunque PHP no es una elección terrible, y quizás sea más fácil comenzar con él). El manejo de cadenas de Python es impresionante, y maneja Unicode a la perfección. Python tiene herramientas y marcos web mucho mejores que C ++, y su manejo de expresiones regulares y bibliotecas estándar (urllib, correo electrónico, etc.) funcionan muy bien. Y no tienes que preocuparte por la gestión de la memoria.

Probablemente solo usaría C o C ++ para una aplicación web si tenía una gran limitación de RAM (como en un micro incorporado) o si trabajaba en Google y estaba codificando un motor de búsqueda que tendría que responder a miles de consultas por segundo.


Hay algunas respuestas nuevas para esto.

  1. Si necesita una aplicación compilada, es posible que el lenguaje Go de Google sea ​​un buen lenguaje compilado con características modernas.
  2. Escribir una aplicación en un lenguaje de scripting (yo uso Perl) se puede hacer a través de marcos como Mojolicious o Dancer , y luego al emplear un controlador PSGI / Plack puede ejecutarse en CGI, FastCGI, mod_perl, servidores nativos (como Hypnotoad de Mojolicious) o Despliegue en la nube, todo sin modificación. Existen conceptos similares para otros lenguajes de script.

Hay personas que preguntaron esto antes: http://cppcms.sourceforge.net/wikipp/en/page/main

El proyecto CppCMS proporciona un marco para el desarrollo web utilizando C ++.

Puede echar un vistazo a los siguientes puntos de referencia para comprender cuál es la diferencia: http://cppcms.sourceforge.net/wikipp/en/page/benchmarks : aproximadamente dos órdenes de magnitud.

El problema de PHP / Python es que son muy lentos, existen muchos problemas para almacenar datos en caché en el proceso FastCGI de PHP.

El mayor problema de C ++ es una baja cantidad de recursos de desarrollo para Web en C ++. Sin embargo, tomar un marco como CppCMS hace que la vida sea mucho más simple.


Hay un punto medio aquí. Python (y creo que Perl y Ruby) te permiten llamar a funciones desde C. 99 veces de cada 100, no es necesario. Pero es bueno saber que la opción está ahí si la necesita.

Por lo general, para aplicaciones web, la velocidad del lenguaje de programación simplemente no es un problema. En el tiempo que lleva ejecutar una única consulta de base de datos, un procesador puede ejecutar unos pocos miles de millones de instrucciones. Es lo mismo para enviar y recibir datos http.


Lástima que no haya puntos de referencia de C / C ++ vs Perl CGI.
Sin FastCGI, creo que C / C ++ sería mucho más rápido, con FastCGI posiblemente sea más rápido (pero tal vez un poco menos, toda la parte de inicialización se ejecuta una vez).
De nuevo, esto depende mucho de la aplicación , por lo que se debe proporcionar algún tipo de puntos de referencia para diferentes páginas web dinámicas.

Personalmente, creo que si su empresa tiene recursos debería / podría invertir en C / C ++ (dado que tienen que encontrar los adecuados ...), de lo contrario es mejor ceñirse a un lenguaje de scripting.
Naturalmente, si desea implementar aplicaciones rápidas , debe usar C / C ++.

Al final del día el lenguaje compilado es más rápido. ¿Pero probablemente encontrar buenos devs de C / C ++ es difícil hoy en día?

Aclamaciones,


La pregunta es "¿dónde se crea el valor?"

Si cree que el valor se crea en la administración de memoria, el diseño de clase cuidadoso y el funcionamiento de la construcción nocturna, entonces use C ++. Tendrá que pasar mucho tiempo escribiendo mucho código para hacer cosas importantes como eliminar objetos a los que ya no se hace referencia.

Si cree que el valor está en la implementación de aplicaciones que las personas pueden usar, entonces use Python con el marco de Django. El tutorial de Django le muestra que en unos 20 minutos puede tener una aplicación en funcionamiento. Está listo para la producción, y podría enfocarse en cosas importantes:

  • El modelo. Solo escribe el modelo en Python, y la capa ORM maneja toda la interacción de la base de datos por ti. No SQL. Sin mapeo manual.

  • La presentación. Simplemente diseñe sus páginas en HTML con unas pocas {{}} "complete un valor aquí" y unas pocas {% for thing in object_list %} construcciones y sus páginas están listas para {% for thing in object_list %} . No hay manipulación de cuerdas.

  • La vista funciona. Escriba funciones Python simples para encapsular la parte de procesamiento de su sitio. No validación (están en formularios), no presentación (que estaba en las plantillas), no el modelo subyacente (que estaba en las clases del modelo), sino un poco de verificación de autorización, procesamiento de consultas y formulación de respuestas. Como Python tiene un amplio conjunto de clases de colección, este código termina siendo muy corto y al punto.

  • Otras cosas. Las asignaciones de URL son expresiones regulares de Python. Las formas se ajustan a su modelo; puede subclasificar los valores predeterminados para agregar la validación y el procesamiento de entrada personalizados.

  • Maravilloso marco de prueba de unidades para funciones de modelo de bajo nivel así como operaciones de extremo a extremo.

Sin gestión de memoria, sin diseño de clase escrupuloso con resúmenes e interfaces. No te preocupes por cómo optimizar la manipulación de cadenas. No construir todas las noches. Solo crea las cosas de valor real.


Los lenguajes de scripting pueden ser más lentos que C, pero ¿es esto un problema? casi nunca. y si el rendimiento se convierte en un problema, comienza a traducir solo las partes críticas.

twitter / ruby ​​es un buen ejemplo; el rubí es lento Algunas de las características del lenguaje (que hacen que Ruby sea agradable en primer lugar) simplemente impiden diferentes tipos de optimización (hay un gran artículo del jruby sobre este tema ... ¿no es ola bini? no puedo recordar).

aún así, twitter está alimentado por ruby, porque ruby ​​es lo suficientemente rápido . No hace mucho, "los blogs" informaban que Twitter había migrado a Scala por razones de rendimiento ... la verdad era que solo la cola de mensajes (y otras partes del backend) se trasladaron a Scala. yahoo se ejecuta en una mezcla de idiomas; php para la interfaz, se utilizan otros lenguajes más rápidos donde el rendimiento es crítico.

Entonces, ¿por qué el rendimiento no es tan importante? hay varias razones:

  • cuello de botella de la base de datos: no es lento el scripting, la base de datos es
  • cuello de botella en el lado del cliente: la representación en el navegador lleva más tiempo que la solicitud. Optimiza el lado del servidor, y nadie se dará cuenta.
  • escala horizontal: a menudo es más barato agregar otro servidor y, por lo tanto, triplicar las solicitudes / segundo que optimizar la aplicación
  • El tiempo de desarrollo y el mantenimiento son las partes más caras de su proyecto. obtendrás más desarrolladores de Python que mantienen tu aplicación más barata que los c-coders habilitados para la web en menos tiempo
  • Sin compilación, ciclos cortos de desarrollo.

otro punto pro-scripting: muchos de los lenguajes de scripting son compatibles con la inclusión o inclusión de código rápido (C):

  • pitón, en línea c
  • php: extensiones en c
  • javascript del lado del servidor a través de rhino: acceso directo a java / jvm (un buen ejemplo de esto es orf.at, uno de los sitios web más grandes de austria, desarrollado por helma - serverside jvm-interpreted javascript!)

Creo que, especialmente en el desarrollo web, las ventajas de los scripts de alto nivel superan con creces los inconvenientes.


Probablemente alguno de ustedes podría estar interesado en Wt [1], un conjunto de herramientas web completamente escrito en C ++. Podría ser una alternativa a cppCMS. Estoy probando tanto en estas vacaciones de navidad ..

[1] wt


Puede usar FastCGI con PHP / Python / Ruby / Perl para obtener un rendimiento en tiempo de ejecución que debería ser suficiente hasta que su sitio crezca realmente. E incluso así, puede realizar mejoras arquitectónicas (ajuste de base de datos, almacenamiento en caché, etc.) para escalar aún más sin abandonar los lenguajes de scripting. Algunos sitios bastante grandes se realizan en PHP / Python / Ruby / Perl.

La gran ganancia que obtiene al usar lenguajes de alto nivel es el rendimiento del programador. Y eso es de lo que deberías preocuparte primero. Será más importante responder rápidamente a las demandas de los usuarios, que recortar algunos milisegundos del tiempo de respuesta de la página.


Si desea poder implementar servicios web en un proceso en ejecución existente (por ejemplo, un demonio), que está escrito en C / C ++. Tiene sentido hacer que el proceso implemente el protocolo FastCGI para esa interfaz. Haga que Apache se ocupe de HTTP (SSL de 2 vías, etc.) con el mundo exterior y las solicitudes de campo a través de FastCGI a través de un socket. Si haces esto en PHP, debes obtener PHP para hablar con tu proceso, lo que significa mantener el código PHP y tu proceso.


Tener una aplicación web FastCGI (sin importar C ++, PHP, Perl, Python, Ruby, etc.) le brinda un mejor tiempo de inicio que una aplicación CGI. Por tiempo de inicio inicial me refiero al tiempo transcurrido entre el momento en que el servidor web recibe la solicitud y el momento en que se ejecuta la primera línea de código que ha escrito, por lo que el tiempo de inicio inicial es el tiempo mínimo que deben esperar los visitantes de su aplicación web para cada solicitud. No es inusual tener un tiempo de inicio inicial de 1 segundo, especialmente si su aplicación es grande o si está usando un marco grande (como Ruby on Rails). FastCGI mantiene sus aplicaciones ejecutándose después de que haya respondido a la primera solicitud, por lo que FastCGI reduce el tiempo de inicio inicial de todas las solicitudes subsiguientes (excepto la primera), por lo general hasta unos pocos milisegundos.

Si usa PHP, generalmente su configuración predeterminada proporciona un tiempo de respuesta inicial suficientemente bueno (incluso sin FastCGI), pero asegúrese de usar un acelerador de PHP en su servidor de producción (consulte http://en.wikipedia.org/wiki/PHP_accelerator ) para obtener un mejor rendimiento.

La mayoría de los lenguajes y marcos de programación le permiten ejecutar la misma aplicación en diferentes modos de servidor (como CGI, FastCGI, servidor web incorporado, módulo de Apache), cambiando las configuraciones de la aplicación sin cambiar el código. Por lo general, FastCGI no es la mejor opción al escribir la aplicación, ya que después de cambiar el código, es posible que tenga que reiniciar la aplicación para que recoja los cambios, pero generalmente es complicado reiniciar una aplicación FastCGI. Reiniciar CGI o un servidor web incorporado es mucho más fácil. Debe configurar FastCGI solo en la configuración de producción.