126 votes

Peut-on dire que node.js est un serveur web ?

Je me suis rendu compte que je confondais le cadre web et le serveur 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

Peut-on dire que node.js est un serveur web ? ??? Je suis tellement confus entre le serveur web et le framework.

Si node.js est en quelque sorte un serveur web, et non un webframework (comme Express), pourquoi avons-nous besoin de mettre tout node.js au-dessus du serveur Nginx dans la pratique ? Question sur le SO

Qui peut nous aider ?

Kit

69voto

Alfred Points 32190

Serveur web

Le serveur web peut se référer soit au matériel (l'ordinateur), soit à l'interface utilisateur. logiciel (l'application informatique) qui aide à fournir un contenu qui accessible via l'internet. 1

La fonction première d'un serveur web est de diffuser des pages web sur le réseau Internet. à la demande des clients. Cela signifie que les documents HTML et tout contenu supplémentaire qui peut être inclus dans un document, tel que des images, feuilles de style et scripts.

Un serveur web est l'élément de base qui permet de transmettre des requêtes/pages aux clients/utilisateurs sur l'internet.

Cadre web

Un cadre d'application web est un logiciel pour soutenir le développement de sites web dynamiques, d'applications web et de services web. Le cadre vise à alléger la charge de travail associée à l'utilisation de associés aux activités courantes du développement Web. [ ] frameworks fournissent des bibliothèques pour l'accès aux bases de données, les templates, les et la gestion des sessions, et ils favorisent souvent la réutilisation du code.

Un cadre web utilise un serveur web pour transmettre les requêtes au client, mais il n'est pas le serveur web.

Node.js

Node.js est une plateforme basée sur le moteur d'exécution JavaScript de Chrome qui permet de facilement des applications réseau rapides et évolutives. Node.js utilise un système d'E/S modèle d'E/S non bloquant et piloté par les événements, ce qui le rend léger et efficace. léger et efficace, parfait pour les applications en temps réel à forte intensité de données qui s'exécutent sur plusieurs serveurs. sur des appareils distribués.

Mais vous pouvez aussi créer des applications CLI, donc je pense que vous devriez plutôt le voir comme une plateforme pour écrire des programmes javascript à exécuter sur votre serveur (ordinateur) à l'aide de Javascript langage de programmation et non plus seulement dans le navigateur comme au début. Je pense que l'on peut voir cela comme Javascript++ ? ?

Vous pouvez également écrire un serveur web avec node.js comme vous pouvez le voir sur la page d'accueil de node.js. Au début, Ryan disait que vous pouviez mettre Nginx devant node.js en raison de la stabilité du projet. Le projet était et est toujours assez jeune. Nginx est un serveur web éprouvé qui continuera à fonctionner alors que node.js peut tomber en panne. Encore une fois, beaucoup d'utilisateurs utilisent node.js pour cela.

29voto

ezpresso Points 1581

Je dirais Node.js est un Environnement d'exécution ou un moteur d'exécution.

La meilleure définition que j'ai trouvée jusqu'à présent provient probablement d'un article de Rob Gravelle intitulé "Une introduction à Node.js" :

Node.js est à la fois un environnement d'exécution et une bibliothèque permettant de créer des applications réseau à l'aide de JavaScript côté serveur. Il utilise le moteur d'exécution JavaScript de Chrome pour exécuter directement le code JS sans passer par le bac à sable du navigateur.

L'encyclopédie PCMAG.COM fournit également les informations suivantes définition suivante de "moteur d'exécution" :

Logiciel dont dépendent certaines applications pour fonctionner sur l'ordinateur. Le moteur d'exécution doit fonctionner sur l'ordinateur pour que l'application puisse s'exécuter. Il fournit les routines et les fonctions communes dont les applications ont besoin et convertit généralement le programme, qui est dans un langage intermédiaire, en langage machine.

De même, le Article de Wikipédia intitulé "Système d'exécution" déclare :

Un système d'exécution (également appelé système d'exécution, environnement d'exécution ou simplement exécution) met en œuvre le comportement de base d'un langage informatique, qu'il s'agisse d'un langage compilé, d'un langage interprété, d'un langage intégré spécifique à un domaine ou qu'il soit invoqué via une API, comme c'est le cas pour pthreads.

... Un système d'exécution peut mettre en œuvre le comportement de tâches telles que dessiner du texte à l'écran ou établir une connexion Internet. Il agit aussi généralement comme une couche d'abstraction qui masque la complexité ou les variations des services offerts par le système d'exploitation.

Existe-t-il des environnements d'exécution (ou même des plateformes logicielles) comme Node.js ? Je pense que JRE est un bon exemple d'un tel environnement. Node.js et JRE ont de nombreux points communs. Ils disposent tous d'une (sorte de) machine virtuelle, d'une bibliothèque de classes et d'un cadre permettant de mettre en œuvre de nombreux types d'applications, y compris des applications CLI.

Pour en revenir à votre question, peut-on dire que Node.js est un serveur web ? Remplaçons "Node.js" par "JRE" et répondons à la question de savoir si JRE est un serveur web. La réponse est non.

Tout ce que l'on peut dire, c'est que Node.js est un environnement d'exécution que l'on peut utiliser pour mettre en œuvre un serveur web. Voilà, c'est mon avis.

28voto

Esakki Krishnan Points 141

Dire que node est un serveur web, c'est comme dire que javacript ne peut fonctionner que dans un navigateur, on peut le dire mais il peut aussi faire beaucoup d'autres choses.

NodeJS

  1. [Environnement d'exécution Javascript (moteur Chrome v8) + Node Library/APIs]
  2. Peut créer un serveur web, peut également être décrit comme un Serveur d'application

Express

  1. Cadre web (utilise le serveur web de nodejs pour servir les fichiers)

Nginx

  1. Serveur web

En production, la plupart des gens utilisent Nginx devant le serveur node en tant que serveur proxy pour servir des fichiers statiques et d'autres éléments divers comme la mise en cache, le routage, etc.

18voto

cmv Points 341

Je classerais node.js comme un cadre de serveur, avec des paquets disponibles qui peuvent l'utiliser comme un serveur HTTP, ou un serveur WebSocket, ou votre propre protocole personnalisé, etc.

La raison pour laquelle vous pouvez placer nginx devant votre serveur node.js est pour l'équilibrage de la charge HTTP et le reverse proxying sur plusieurs machines exécutant votre application serveur.

13voto

Trunk Points 311

Comme je ressens votre douleur !

Comme beaucoup, j'ai trouvé qu'il était difficile d'accéder à l'essence de Node.js parce que la plupart des gens n'écrivent/parlent que de la partie de Node qu'ils trouvent utile - et la partie qu'ils trouvent intéressante est généralement un avantage secondaire de Node plutôt que son objectif principal. Je dois dire que je pense qu'il est absurde de dire que Node n'est qu'un moteur d'exécution JavaScript. L'utilisation de JavaScript par Node - et sa sélection du runtime V8 - sont tout simplement un moyen de parvenir à une fin les meilleurs outils pour le problème que les développeurs de Node voulaient résoudre.

L'objectif premier de Node était de rendre plus efficace la gestion des événements des utilisateurs dans une application web. Node est donc à une écrasante majorité utilisé dans le back-end d'une application web. La gestion des événements exige que le serveur soit à l'écoute de ces événements. Un serveur http doit donc être configuré pour acheminer chaque événement vers le gestionnaire approprié script. Node fournit un cadre pour mettre rapidement en place un serveur qui écoute les requêtes des utilisateurs sur un port dédié. Node utilise JavaScript pour le traitement des événements parce que JavaScript permet d'appeler des fonctions en tant qu'objets . Cela permet à la tâche d'être exécutée immédiatement après une requête asynchrone (par exemple, vers un système de fichiers, une base de données ou un réseau), d'être enveloppée dans une fonction et référencée en tant que paramètre de l'appel de fonction de la requête asynchrone.

const mysql = require('mysql2');

const conn = mysql.createConnection(
{
    host: "XXXXXXXXXXXXX",
    database: "doa_statsbase",
    user: "uoalabama_doas",
    password: "*************"
});
. . . 
. . . 
const analyse_bigwheat_farmers = (err, result, fields) =>
{
    . . . . .
    . . . . .
    return data_object;
}
. . . 
. . .
let query = "SELECT * FROM us_farmers WHERE acreage > '1000' AND crop='wheat'"; 

mysql.query(query, (err, result, fields) =>
{
   analyse_bigwheat_farmers(err, result, fields);
}
. . . 
. . . 
. . . 

Peu d'autres langages traitent les fonctions comme des objets et ceux qui le font n'ont pas forcément un interpréteur aussi efficace que le runtime V8 de Google. La plupart des développeurs web connaissent déjà JavaScript, il n'est donc pas nécessaire d'apprendre un autre langage avec Node. De plus, le fait d'avoir des fonctions de rappel permet de placer toutes les tâches de l'utilisateur sur un seul thread sans que des blocages explicites soient appliqués aux tâches nécessitant un accès à la base de données ou au système de fichiers. C'est ce qui explique l'efficacité d'exécution supérieure de Node en cas d'utilisation simultanée intensive, ce qui est l'objectif premier de son développement.

Aujourd'hui, la plupart des applications web Node utilisent les callbacks avec parcimonie, car JavaScript ES6 a introduit la fonction Promesse en 2015 pour gérer les appels asynchrones de manière plus simple et plus lisible.

Pour aider les utilisateurs de Node à écrire rapidement du code back-end, les développeurs de Node ont également mis en place une bibliothèque JS intégrée pour les tâches de routine (par exemple, les questions liées aux requêtes HTTP, au (dé)codage de chaînes, aux flux, etc.) et le référentiel NPM (Node Package Manager) : il s'agit d'un ensemble de paquets script open source, maintenus par l'utilisateur, pour diverses fonctions standard et personnalisées. Tous les projets Node permettent d'importer des paquets NPM dans un projet par le biais de la méthode établie npm install commande.

Les demandes des utilisateurs traitées par Node seront des choses nécessaires à l'application web comme l'authentification, l'interrogation de la base de données, les mises à jour du système de gestion de contenu (ApostropheCMS, Strapi CMS), etc. Toutes ces requêtes seront envoyées au port Node. (Lorsque l'analyse des données provenant d'une base de données prend beaucoup de temps CPU, ce type de processus est mieux placé sur un thread séparé afin de ne pas ralentir les requêtes plus simples des utilisateurs). Les autres types de demandes de l'utilisateur, par exemple pour charger une autre page web, télécharger des fichiers CSS/JS/image, etc., continueront d'être envoyées par le navigateur aux ports par défaut (généralement les ports 80 (HTTP) et 443 (HTTPS) sur la machine serveur où le programme du serveur web (Apache, NGinx, etc.) les traitera à la manière d'un site web traditionnel.

[Une remarque sur la transmission des requêtes au serveur. Étant donné que les pare-feu de la plupart des serveurs n'autorisent que les ports par défaut 80/443, il n'est généralement pas possible d'envoyer des requêtes au serveur. directement envoyer une requête Node.js avec un autre port dans l'URL, par exemple https://mynodeapp.com:3001/fetch-members. Si c'était le cas, le pare-feu de la machine serveur l'ignorerait tout simplement, car elle fait directement référence à un port illégal. Au lieu de cela, on peut appliquer une URL à la requête qui n'a pas de numéro de port explicite mais qui contient un nom de dossier virtuel qui identifie l'application Node.js, par exemple https://mynodeapp.com/mynodeapp/fetch-members. Ajoutez ensuite un code de directive serveur dans le fichier .htaccess, comme par exemple :

RewriteEngine On
RewriteRule ^mynodeapp/(.*) https://localhost:3001/$1 [P]

Les requêtes Node.js auxquelles des URL sont données de cette manière trouveront donc leur chemin vers le serveur Node.js de cette application web via les ports désignés pour l'application Node, c'est-à-dire 3001 dans l'exemple ici].

Ainsi, dans la pratique, Node est principalement un cadre pour la création rapide de serveurs et la gestion d'événements, mais qui ne remplace que certaines des fonctions du programme du serveur web.

D'autres utilisations de Node qui ne sont pas des applications dorsales exploitent simplement l'une ou l'autre de ses fonctionnalités, par exemple le moteur JavaScript V8. Par exemple, les outils de construction frontale Grunt y Gulp utiliser une application Node.js frontale pour traiter un script de construction qui peut être codé pour convertir SASS en CSS, minifier les fichiers CSS/JS, optimiser la taille ou le chargement des images, générer des fichiers HTML d'état de page pour rafraîchir les états de page dans un site d'application à page unique, etc. Mais ce type de travail n'est qu'un sous-produit de l'utilisation de Node et non son utilisation principale qui est de créer des processus backend efficaces pour les applications web modernes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X