¿Podemos decir que node.js es un servidor web?

92

Descubrí que soy confuso entre el marco web y el servidor web.

Apache is a web server.

Tornado is a web server written in Python.

Nginx is a web server written in C

Zend is a web framework in php

Flask/Bottle is a web framework in Python

RoR is a web framework written in Ruby

Express is a web framework written in JS under Node.JS

¿Podemos decir que node.js es un servidor web? Estoy tan confundido entre servidor web / marco.

Si de alguna manera node.js es una especie de servidor web, no un webframework (Express lo hace), ¿por qué tenemos que poner todo el node.js encima del servidor Nginx en una práctica útil? Pregunta sobre SO

¿Quién puede ayudar?

Equipo

Kit Ho
fuente
4
Tornado es un servidor web + un pequeño marco web. :) Creo que ezpresso tiene razón. Node.js es en realidad un entorno de ejecución muy parecido al JRE de Java. Node.js se usa cada vez más para aplicaciones no web. Los programas que escribe con Node.js no tienen capacidad de servidor web a menos que lo agregue. Por supuesto, Node.js tiene funciones nativas de muy alto nivel que le permiten crear fácilmente un servidor web con http.CreateServer (...). Listen (80); pero no existe un servidor web en su programa a menos que agregue esto. Entonces, Node.js en sí mismo no es un servidor web. Más bien, usa Node.js para crear uno.
OCDev
1
Estrictamente hablando, no necesita poner un servidor web encima de Node.js; puede escribir un servidor pequeño dentro de su proyecto Node y hacer que maneje todas las solicitudes de rutina del navegador, así como las específicas de la aplicación web en cuestión. Pero cosas como los cambios en la página web se manejan mejor con un servidor web, por ejemplo, Nginx. Entonces, aunque no tiene que involucrar un servidor web con Node, a menudo es más prudente hacerlo.
Trunk
¿C ++ es un servidor web? No, es un lenguaje de programación que puedes usar para escribir uno. Lo mismo con node.js.
alfadog67

Respuestas:

53

Servidor web

El servidor web puede referirse al hardware (la computadora) o al software (la aplicación de la computadora) que ayuda a entregar contenido al que se puede acceder a través de Internet. 1

La función principal de un servidor web es entregar páginas web en la solicitud a los clientes. Esto significa la entrega de documentos HTML y cualquier contenido adicional que pueda incluir un documento, como imágenes, hojas de estilo y scripts.

Un servidor web es básico para entregar solicitudes / páginas a los clientes / usuarios en Internet.

Marco web

Un marco de aplicación web es un marco de software diseñado para respaldar el desarrollo de sitios web dinámicos, aplicaciones web y servicios web. El marco tiene como objetivo aliviar la sobrecarga asociada con las actividades comunes realizadas en el desarrollo web. Por ejemplo, muchos marcos proporcionan bibliotecas para el acceso a bases de datos, marcos de creación de plantillas y administración de sesiones, y a menudo promueven la reutilización del código.

Un marco web utiliza un servidor web para entregar las solicitudes al cliente, pero no es el servidor web.

Node.js

Node.js es una plataforma basada en el tiempo de ejecución de JavaScript de Chrome para crear fácilmente aplicaciones de red rápidas y escalables. Node.js utiliza un modelo de E / S sin bloqueo controlado por eventos que lo hace liviano y eficiente, perfecto para aplicaciones en tiempo real con uso intensivo de datos que se ejecutan en dispositivos distribuidos.

Pero, de nuevo, también puede crear aplicaciones CLI, así que creo que debería verlo más como una plataforma para escribir programas javascript para ejecutar en su servidor (computadora) usando el lenguaje de programación Javascript en lugar de solo en el navegador como al principio. Creo que podrías verlo como ??Javascript++

También puede escribir un servidor web con node.js como puede ver en la página principal de node.js. Al principio, Ryan dijo que podía poner Nginx delante de node.js debido a la estabilidad del proyecto. El proyecto era y sigue siendo bastante joven. Nginx es un servidor web probado que seguirá funcionando mientras node.js pueda fallar. Por otra parte, muchos usuarios simplemente usan node.js para eso.

Alfredo
fuente
6
Node.js es un Javascript en tiempo de ejecución integrado en el motor V8 de JavaScript de Google ...
ozanmuyes
1
¿Cómo pueden los servidores web (apache o nginx) ser hardware?
shadow0359
Creo que la pregunta principal es si Node.js escucha el puerto HTTP de forma predeterminada. Si es así, también lo clasifica como servidor HTTP.
forsberg
1
Podemos decir que el cuadrado es un rectángulo pero no al revés. ¿Estás diciendo que Nodejs es más que un servidor web? ¿O no representa un servidor web en absoluto?
CME64
1
@ shadow0359 Un poco tarde, pero para cualquier otra persona que lea esto, el servidor web no es solo el software. También puede significar el hardware físico, la computadora donde se ejecuta el software
Christoffer
25

Yo diría que Node.js es un entorno de ejecución o un motor de ejecución.

Probablemente la mejor definición que he encontrado hasta ahora proviene de un artículo de Rob Gravelle titulado "Una introducción a Node.js" :

Node.js es un entorno de ejecución parcial y una biblioteca parcial para crear aplicaciones de red utilizando JavaScript del lado del servidor. Utiliza el motor de tiempo de ejecución de JavaScript de Chrome para ejecutar código JS directamente sin la necesidad de la zona de pruebas del navegador.

Además, la Enciclopedia PCMAG.COM proporciona la siguiente definición de "motor en tiempo de ejecución":

Software del que dependen ciertas aplicaciones para ejecutarse en la computadora. El motor de tiempo de ejecución debe estar ejecutándose en la computadora para que se ejecute la aplicación. Proporciona rutinas y funciones comunes que requieren las aplicaciones y, por lo general, convierte el programa, que está en un lenguaje intermedio intermedio, en lenguaje de máquina.

Además, el artículo de Wikipedia titulado "Sistema en tiempo de ejecución" declara:

Un sistema de tiempo de ejecución (también llamado sistema de tiempo de ejecución, entorno de tiempo de ejecución o simplemente tiempo de ejecución) implementa el comportamiento básico de un lenguaje de computadora, ya sea que el lenguaje sea un lenguaje compilado, un lenguaje interpretado, un lenguaje específico de dominio incorporado o se invoca a través de una API como es pthreads.

... Un sistema en tiempo de ejecución puede implementar el comportamiento de tareas como dibujar texto en la pantalla o hacer una conexión a Internet. También suele actuar como una capa de abstracción que oculta la complejidad o variaciones en los servicios ofrecidos por el sistema operativo.

Bueno, ¿existen entornos de ejecución (o incluso plataformas de software) como Node.js? Creo que JRE es un buen ejemplo de este tipo de entorno. Node.js y JRE: tienen muchos en común. Todos tienen (una especie de) máquina virtual, una biblioteca de clases y un marco para implementar muchos tipos de aplicaciones, incluidas las CLI.

Entonces, volviendo a su pregunta, ¿podemos decir que Node.js es un servidor web? Cambiemos "Node.js" por "JRE" y respondamos si JRE es un servidor web. La respuesta es no.

Todo lo que podemos decir es que Node.js es un entorno de ejecución que se puede utilizar para implementar un servidor web. Bueno, esa es mi opinión.

ezpresso
fuente
En primer lugar, ignora el propósito de tener ese tiempo de ejecución, así como la inutilidad de tenerlo sin todos los módulos [ nodejs.org/docs/latest-v9.x/api/] esenciales para que haga algo realmente útil.
Trunk
19

Decir que node es un servidor web es como decir que javacript solo se puede ejecutar dentro de un navegador, puede decir eso, pero también puede hacer muchas otras cosas.

NodeJS

  1. [Entorno de tiempo de ejecución de JavaScript (motor Chrome v8) + biblioteca de nodos / API]
  2. Puede crear un servidor web, también se puede describir como un servidor de aplicaciones

Rápido

  1. Marco web (utiliza el servidor web de nodejs para servir archivos)

Nginx

  1. Servidor web

En producción, la mayoría de la gente usa Nginx frente al servidor de nodo como servidor proxy para servir archivos estáticos y otros elementos diversos como almacenamiento en caché, enrutamiento, etc.

Esakki Krishnan
fuente
1
más uno por mencionar que NodeJS se puede usar tanto para un servidor web como para un servidor de aplicaciones, y por mencionar el Express.
Yahya
16

Clasificaría node.js como un marco de servidor, con paquetes disponibles que pueden usarlo como un servidor HTTP, o un servidor WebSocket, o su propio protocolo personalizado, etc.

La razón por la que podría poner nginx frente a su servidor node.js es para el equilibrio de carga HTTP y el proxy inverso en varias máquinas que ejecutan su aplicación de servidor.

cmv
fuente
1
Si. Un marco web le ayuda a escribir una aplicación web, que utiliza HTML y JavaScript para la interfaz de usuario y se comunica a través de HTTP. Ejemplos de un marco web serían Express para node.js o Django para Python.
cmv
La mejor respuesta de todos los intentos. +1.
Tronco
Supongo que pegar ngnix no sería una solución adecuada, podemos usar el proxy hs para la solución de equilibrio de carga
Kartikeya Sharma
@cmv lo siento, llego tarde a la convo !!! Sin embargo, ¿tiene que poner nginx delante del nodo pero con un equilibrador de carga? ¿Puedo poner el balanceador de carga frente a la instancia EC2 y terminar con él para permitir que se canalice hacia el nodo y exprese los puntos finales?
lopezdp
4

¡Cómo siento tu dolor!

Como a muchos, me resultó difícil llegar a la esencia de Node.js porque la mayoría de las personas solo escriben / hablan sobre la parte de Node que les resulta útil, y la parte que encuentran interesante suele ser un beneficio secundario de Node en lugar de su principal propósito. Debo decir que creo que es una locura que la gente diga que Node es solo un tiempo de ejecución de JavaScript. El uso de JavaScript por parte de Node, y su selección del tiempo de ejecución de V8, son simplemente un medio para un fin , las mejores herramientas para el problema que los desarrolladores de Node querían resolver.

El objetivo principal de Node era hacer que la gestión de eventos de usuario en una aplicación web fuera más eficiente. Entonces, Node es abrumadoramenteutilizado en el back-end de una aplicación web. La gestión de eventos exige que algo esté escuchando en la máquina del servidor para estos eventos de usuario. Por lo tanto, se debe configurar un servidor http para enrutar cada evento a su script de controlador apropiado. Node proporciona un marco para configurar rápidamente un servidor para escuchar en un puerto dedicado las solicitudes de los usuarios. El nodo usa JavaScript para el manejo de eventos porque JavaScript tiene funciones de devolución de llamada: esto permite suspender una tarea hasta que se devuelva el resultado de una tarea dependiente. No muchos otros idiomas tienen esta función y los que la tienen pueden no tener un intérprete tan eficiente como el motor de ejecución V8 de Google. La mayoría de los desarrolladores web conocen JavaScript, por lo que no hay aprendizaje de idiomas adicional con Node. Además, tener funciones de devolución de llamada permite poner todas las tareas del usuario en un solo hilosin tener que aplicar un bloqueo explícito a las tareas que exigen acceso a la base de datos o al sistema de archivos. Y esto es lo que conduce a la eficiencia de ejecución superior de Node bajo un uso concurrente intenso, el propósito principal de su desarrollo.

Para ayudar a los usuarios de Node a escribir rápidamente el código de back-end, los desarrolladores de Node también organizaron una biblioteca JS incorporada para tareas rutinarias (por ejemplo, asuntos relacionados con solicitudes HTTP, codificación de cadenas, secuencias, etc.) y el repositorio de NPM (Node Package Manager) : este es un conjunto de paquetes de script de código abierto mantenido por el usuario para varias funciones estándar y personalizadas. Todos los proyectos de Node permiten la importación de paquetes NPM en un proyecto a través del comando npm install establecido .

Las solicitudes de usuario manejadas a través de Node serán cosas necesarias para la aplicación web como autenticación, consulta de bases de datos, administración de contenido (Strapi CMS), etc. Todo esto se enviará al puerto de Node. (Cuando el análisis de los datos obtenidos de una base de datos requiere mucho tiempo de CPU, es mejor colocar este tipo de proceso en un hilo separado para que no ralentice las solicitudes de usuario más simples). Otros tipos de solicitud de usuario, por ejemplo, para cargar otra página web , descargar CSS / JS / archivos de imagen, etc., continuará siendo enviado por el navegador a los puertos predeterminados en la máquina del servidor donde el programa del servidor web (Apache, NGinx, etc.) los manejará.

Entonces, en la práctica , Node es principalmente un marco para la creación rápida de servidores y el manejo de eventos, pero reemplaza solo algunas de las funciones del programa del servidor web.

Otros usos no backend de Node simplemente explotan una u otra de sus características, por ejemplo, el motor V8. Por ejemplo, las herramientas de compilación de frontend Grunt y Gulp usan Node.js para procesar un script de compilación que se puede codificar para convertir SASS a CSS, minimizar archivos CSS / JS, optimizar el tamaño / carga de la imagen, etc. Pero este tipo de trabajo es realmente solo un subproducto de Node, no su uso principal, que es para hacer procesos de backend eficientes para aplicaciones web.

Maletero
fuente
2

El servidor web es algo que sirve a sus clientes a través de Internet sobre protocolos y Web Framework es algo así como lo que llamamos compilador. Consta de todas las bibliotecas necesarias, reglas de sintaxis, etc.

¡Y node.js es un framework!

Codificador loco.
fuente
2
¿Pero Node no incluye módulos (por ejemplo, http) diseñados para permitir que uno codifique rápidamente su propio servidor?
Trunk
1

Creo que el problema es que la terminología de "servidor web" o "servidor de aplicaciones web" está dominada por el mundo JEE, y los productos, que no están tan modularizados como el mundo Javascript de frameworks actual, que a su vez se pueden combinar más o menos libremente.

No veo ninguna razón por la que una tecnología, que puede servir aplicaciones complejas a través de la web, no deba llamarse servidor web o servidor de aplicaciones web.

Si combina, digamos Nuxt como interfaz, con Feathers como backend, ¡tendrá un backend que sirve una API REST y una interfaz de usuario renderizada del lado del servidor!

Por supuesto, podría (mal) usar eso para entregar contenido estático, luego lo llamaría servidor web, o podría usarlo para crear y entregar una aplicación completa, luego lo llamaría servidor de aplicaciones web.

Son las características o cualidades combinadas las que se resumen para cumplir un propósito, ¿verdad? - Características como estabilidad, escalabilidad y demás son, en mi humilde opinión, algo que se agregará a esas tecnologías, con el tiempo. Por ahora, todavía son bastante nuevos.

cslotty
fuente
0

Acabo de usar Node.js por primera vez para crear un bot de Discord. Mi pensamiento fue "Vaya, ¿Node.js es un servidor? ¡Pensé que era una biblioteca JS!" O quizás podría haberlo pensado como un marco.

¿Es un servidor web? No, pero puedes hacer uno con él. ¿Es un servidor? ¿Como en el software que recibe consultas y sirve el resultado? Si.

En mi caso, he emitido el comando: node index.js

Y ahora Node.js está esperando solicitudes para responder (a través de mi bot). Es un servidor, pero no sirve páginas web.

Rick Henderson
fuente
-1

No, es un entorno de ejecución ... por lo que no es un servidor web, pero no necesita uno para ejecutarse. Así que probablemente esta sea la razón por la que podría resultar confuso. Puede ejecutarse de forma independiente sin necesidad de ningún servidor web porque es un tiempo de ejecución en sí mismo, pero de nuevo no es un servidor web.

desbordamiento
fuente
1
Creo que esta respuesta, aunque técnicamente cierta, es demasiado breve y no informativa para un principiante.
Tronco