Ayuda a comprender las secuencias de comandos del lado del servidor

8

Por lo que yo entiendo, hay básicamente 3 opciones para hacer secuencias de comandos del lado del servidor en estos días:

  1. Utilizando lenguajes de secuencias de comandos que pueden ser directamente interpretados / ejecutados por el servidor web (por ejemplo, PHP y ASP), donde los scripts se interpretan / ejecutan sobre la marcha (es decir, a medida que llegan las solicitudes HTTP), la salida se incrusta en páginas HTML. enviado de vuelta al cliente.

  2. Usando cualquier lenguaje (por ejemplo, C, C ++, PERL, Python), el sistema operativo del servidor es capaz de ejecutarse (ya sea usando un intérprete o usando el archivo ejecutable ya compilado) y luego usando CGI para comunicarse entre el servidor web y el SO . La salida de los scripts llega a través del CGI al servidor en forma de páginas HTML completas y luego se envía de vuelta al cliente.

  3. Usar Java en un servidor que puede manejar servlets / JSP, que es más o menos la misma idea que la opción 1 anterior, excepto que usa Java en lugar de PHP / ASP.

Preguntas :

  1. ¿Está mi comprensión hasta ahora en camino, o me equivoqué?

  2. ¿Son ASP y PHP los únicos lenguajes que un servidor web puede interpretar y ejecutar directamente?

  3. ¿Dónde cae Ruby en la clasificación anterior? ¿Puede ser interpretado / ejecutado por servidores como PHP? ¿O se comunica a través de CGI?

  4. ¿Las secuencias de comandos del lado del servidor a través de CGI se están volviendo obsoletas o no?

Daniel Scocco
fuente

Respuestas:

10

Tu comprensión es correcta, si eres del pasado. Estás más o menos descrito como parecía en la década de 1990.

Sí, un complemento de servidor web puede ejecutar muchos idiomas directamente. Justo para PHP, mod_php para Apache sigue siendo la forma más popular de alojarlo. Sin embargo, los sitios de alto tráfico utilizan un enfoque más moderno, utilizando el servidor web solo como un proxy para FastCGI (en el caso de PHP es PHP-FPM )

la salida se incrusta en páginas HTML y luego se envía de vuelta al cliente.

Creo que te estás refiriendo al llamado código de espagueti de principios de los 90, sin embargo, el enfoque moderno es usar uno de los muchos marcos MVC. En el caso de PHP, eso significaría, por ejemplo, Zend Framework (existen numerosas alternativas).

En cuanto a ASP, probablemente se refiera al llamado "ASP clásico", que es obsoleto. Actualmente es ASP.NET, que puede usar cualquiera de los lenguajes .NET (C # es el más popular) y, por supuesto, el marco .NET.

C y C ++ generalmente no se usan para aplicaciones web. Si es así, dichos servicios se implementan como servidores independientes, como módulo para servidor web o como FastCGI .

Perl se puede ejecutar directamente desde el módulo de servicio web utilizando mod_perl . También hay PSGI , que es básicamente un clon del WSGI de Python .

Python es un lenguaje muy popular para aplicaciones web. Se puede ejecutar directamente desde el servidor web Apache a través de mod_python, sin embargo, eso es obsoleto y no se recomienda. Actualmente, el camino a seguir con Python es a través del módulo del servidor WSGI . Servidor WSGI implementado en Python (por ejemplo, CherryPy, WebPy) o usando la pila web Python independiente (Tornado y el módulo web de Twisted son buenos ejemplos). Y, por supuesto, una vez más, lo más probable es que esté utilizando el marco MVC compatible con WSGI , Django es el más popular (nuevamente, hay varias alternativas disponibles).

Ruby, nuevamente lenguaje muy popular para aplicaciones web. Mejor conocido por el framework web Ruby on Rails, que nuevamente es MVC. Puede ejecutar Ruby directamente desde el módulo del servidor a través de mod_ruby o FastCGI .

Servlets / JSP se ejecutan en servidores de aplicaciones J2EE independientes, como JBoss o Tomcat. Se usa más comúnmente para agregar una interfaz web al sistema empresarial en lugar de crear aplicaciones web independientes.

El CGI clásico (es decir, el proceso de generación en cada solicitud) se ha vuelto obsoleto hace muchos años. Ha sido reemplazado por FastCGI (donde el proceso es de larga duración, en lugar de generarse en cada solicitud), módulos de servidor, interfaces como WSGI y clones y soluciones independientes.

También ha evolucionado el paradigma del procesamiento de solicitudes, con CGI fue el proceso por solicitud. Luego estaba el grupo de procesos (o grupo de subprocesos), cada proceso (subproceso) manejaba una solicitud a la vez. Sin embargo, ahora, el enfoque más moderno es que los servidores web y los marcos independientes utilicen la programación controlada por eventos.

vartec
fuente
Pensé que Django era principalmente un CMS, para sitios de noticias, etc. ¿Se puede usar para construir sitios web regulares, como un sitio de comercio electrónico?
aml90
1
@amalantony django es un marco web. Es un conjunto de pautas y bibliotecas que lo ayudan a escribir software como un CMS.
Burhan Khalid
1
@amalantony: como dijo burhan, Django es un framework web, no CMS en absoluto. Se puede usar para construir CMS, y hay varios paquetes de CMS construidos sobre él ( djangopackages.com/grids/g/cms ) así como también eCommerce ( djangopackages.com/grids/g/ecommerce ) y sobre cualquier otra cosa Tu puedes pensar en.
vartec
7

Permítanme presentar esto diciendo que es una visión extremadamente genérica y simplificada de lo que sucede.

El software de servidor web (como Apache o IIS) no interpreta ningún código; No sabe cómo. Todo lo que sabe hacer es tomar una solicitud, buscarla en alguna ubicación del sistema de archivos y luego enviar el elemento solicitado nuevamente al navegador. Eso es todo lo que hace, a un nivel muy simple. Es por eso que cuando instala Apache y agrega algún archivo php al DocumentRoot, no obtiene el resultado PHP ejecutado; solo el archivo de vuelta.

El primer paso para lograr que el servidor haga algo que no sea servir archivos es agregar código que le indique que haga algo más cuando se solicite un archivo específico ; de lo contrario, todo lo que hará es intentar servir el archivo de acuerdo con su tipo mime predeterminado (que generalmente es texto / sin formato). Es por eso que cuando tiene un servidor configurado incorrectamente y lo solicita index.php, ve el código fuente del archivo en lugar del resultado previsto.

Entonces, para que un servidor web "comprenda" PHP, debe decirle qué hacer cuando .phpentra una solicitud de un archivo con la extensión. Aquí es donde mod_phpentra. Este módulo descarga la solicitud a un intérprete PHP (cómo se puede configurar), que luego lee el archivo, ejecuta el código, compila los resultados; y envía los resultados al servidor, que a su vez entrega los resultados al cliente. Luego configura el servidor web para que mod_php maneje todos los archivos que tienen .php al final.

Este flujo de trabajo básico también se aplica con otros idiomas; la única diferencia es a qué 'descarga' el servidor la solicitud.

El caso para PHP se explicó anteriormente, existe de manera similar mod_python, y fastcgi, wsgiy otros protocolos establecidos en las solicitudes de descargue que un servidor web no está diseñado para manejar.

Las implementaciones más comunes tienen un proceso de larga ejecución que espera una solicitud en un puerto (o socket) específico. Luego, el servidor web se configura como un proxy , de modo que pasa cualquier solicitud que coincida con un patrón específico a este proceso de larga ejecución y luego vuelve a leer los resultados.

Así es como funcionan los ruby ​​on rails (rack), los scripts de python (con wsgi).

Esta es también la razón por la cual los servidores web simples tipo proxy como nginx son muy populares. Solo realizan las tareas más básicas de un servidor web tradicional: sirven los archivos "estáticos" y son muy buenos para descargar solicitudes a otros servidores proxy para manejar cosas como PHP, Python, ASP, etc. Alabama.

Entonces, al final, tienes el servidor web, que se encarga de los archivos estáticos, cualquier cosa que no necesite procesamiento.

Tiene otro proceso, que sabe cómo manejar su código (por ejemplo, un proceso que ejecuta el intérprete PHP o un servidor uWSGI). Esto se sienta y espera las solicitudes del servidor web.

Finalmente, tiene sistemas como advenedizo y supervisor que administran estos procesos por usted.

Espero que esto aclare el asunto.

Burhan Khalid
fuente
Ayudó mucho, gracias. Otra pregunta: ¿por qué PHP y ASP son los únicos lenguajes que le permiten tener scripts directamente incrustados en páginas (por ejemplo, index.php)?
Daniel Scocco
@daniels no lo son - Sé que puedes incrustar C # o VB.NET en páginas ASP.NET - seguramente habrá más ...
Murph
@daniels: No es que otros no puedan, es que se ha aceptado durante mucho tiempo que es mejor separar el marcado de la lógica. Puede escribir un montón de Ruby en sus archivos ERB, o C # en sus archivos aspx, si lo desea, pero ¿por qué hacer eso cuando puede mantenerlo bien separado?
pdr
0

Hay una cuarta opción, que se usa en los más 'serios'; sitios web como bancos u otros servicios financieros: el enfoque de n niveles que es un poco como CGI, excepto que el proceso CGI se ejecuta en un servidor diferente, el código del servidor web es muy delgado (lo suficiente como para reformatear los datos en html) y llama al ' servicios de cgi a través de protocolos de red como RPC o SOAP.

Sigue siendo el mismo enfoque básico que utiliza un servidor web como puerta de enlace entre la solicitud http realizada por el navegador del cliente y un 'motor de código' que aloja la lógica empresarial. Tenga en cuenta que en este caso el servidor web pasará la solicitud a un motor de secuencias de comandos en un idioma (por ejemplo, PHP o XSLT) que a su vez llama a otro servicio que le proporciona datos sin procesar, el script web se utiliza únicamente para formatear esos datos en el html página que se entrega al navegador.

gbjbaanb
fuente