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
node.js
webserver
web-frameworks
Kit Ho
fuente
fuente
Respuestas:
Servidor web
Un servidor web es básico para entregar solicitudes / páginas a los clientes / usuarios en Internet.
Marco web
Un marco web utiliza un servidor web para entregar las solicitudes al cliente, pero no es el servidor web.
Node.js
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.
fuente
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" :
Además, la Enciclopedia PCMAG.COM proporciona la siguiente definición de "motor en tiempo de ejecución":
Además, el artículo de Wikipedia titulado "Sistema en tiempo de ejecución" declara:
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.
fuente
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
Rápido
Nginx
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.
fuente
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.
fuente
¡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.
fuente
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!
fuente
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.
fuente
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.
fuente
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.
fuente