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

92

J'ai trouvé 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 serveur Web / framework.

Si d'une manière ou d'une autre node.js est une sorte de serveur Web, pas de webframework (Express le fait), pourquoi avons-nous besoin de mettre tout node.js au-dessus du serveur Nginx dans une pratique utile? Question sur SO

Qui peut aider???

Trousse

Kit Ho
la source
4
Tornado est un serveur Web + un petit framework Web. :) Je pense qu'ezpresso a raison. Node.js est en fait un environnement d'exécution similaire au JRE de Java. Node.js est de plus en plus utilisé pour les applications non Web. Les programmes que vous écrivez avec Node.js n'ont aucune capacité de serveur Web, sauf si vous l'ajoutez. Certes, Node.js a des fonctions natives de très haut niveau qui vous permettent de créer facilement un serveur Web avec http.CreateServer (...). Listen (80); mais il n'y a pas de serveur Web dans votre programme, sauf si vous l'ajoutez. Donc Node.js lui-même n'est pas un serveur Web. Vous utilisez plutôt Node.js pour en créer un.
OCDev
1
À proprement parler, vous n'avez pas besoin de mettre un serveur Web au-dessus de Node.js - vous pouvez écrire un petit serveur dans votre projet Node et le faire gérer toutes les demandes de routine du navigateur ainsi que celles propres à l'application Web concernée. Mais des choses comme les changements de page Web sont mieux gérées par un serveur Web, par exemple Nginx. Ainsi, bien que vous n'ayez pas à impliquer un serveur Web avec Node, il est souvent plus sage de le faire.
Tronc du
Le C ++ est-il un serveur Web? Non, c'est un langage de programmation que vous pouvez utiliser pour en écrire un. Idem avec node.js.
alfadog67

Réponses:

53

serveur Web

Le serveur Web peut faire référence au matériel (l'ordinateur) ou au logiciel (l'application informatique) qui aide à fournir un contenu accessible via Internet. 1

La fonction principale d'un serveur Web est de fournir des pages Web à la demande aux clients. Cela signifie la livraison de documents HTML et de tout contenu supplémentaire pouvant être inclus dans un document, comme des images, des feuilles de style et des scripts.

Un serveur Web est la base pour fournir des demandes / pagess aux clients / utilisateurs sur Internet

Cadre Web

Un cadre d'application Web est un cadre logiciel conçu pour prendre en charge le développement de sites Web dynamiques, d'applications Web et de services Web. Le cadre vise à réduire les frais généraux associés aux activités courantes effectuées dans le développement Web. Par exemple, de nombreux frameworks fournissent des bibliothèques pour l'accès aux bases de données, les frameworks de création de modèles et la gestion de session, et ils encouragent souvent la réutilisation du code.

Un framework Web utilise un serveur Web pour fournir les demandes au client, mais ce n'est pas le serveur Web.

Node.js

Node.js est une plate-forme basée sur le moteur d'exécution JavaScript de Chrome pour créer facilement des applications réseau rapides et évolutives. Node.js utilise un modèle d'E / S non bloquant et piloté par les événements qui le rend léger et efficace, parfait pour les applications en temps réel gourmandes en données qui s'exécutent sur des appareils distribués.

Mais là encore, vous pouvez également créer des applications CLI, donc je pense que vous devriez le voir davantage comme une plate-forme pour écrire des programmes javascript à exécuter sur votre serveur (ordinateur) en utilisant le langage de programmation Javascript au lieu de simplement dans le navigateur comme au début. Je pense que vous pourriez le voir comme ??Javascript++

Vous pouvez également écrire un serveur Web avec node.js comme vous pouvez le voir sur la première page de node.js. Au début, Ryan a dit que vous pouviez placer Nginx devant node.js en raison de la stabilité du projet. Le projet était et est encore assez jeune. Nginx est un serveur Web éprouvé qui continuera à fonctionner pendant que node.js peut planter. Là encore, beaucoup d'utilisateurs utilisent simplement node.js pour cela.

Alfred
la source
6
Node.js est un moteur d'exécution JavaScript basé sur le moteur JavaScript V8 de Google ...
ozanmuyes
1
Comment les serveurs Web (Apache ou Nginx) peuvent-ils être matériels?
shadow0359
Je pense que la question principale est de savoir si Node.js écoute le port HTTP par défaut? Si tel est le cas, il le classe également comme serveur HTTP.
forsberg
1
On peut dire que le carré est un rectangle mais pas l'inverse. êtes-vous en train de dire que Nodejs est plus qu'un simple serveur Web? ou ne représente-t-il pas du tout un serveur Web?
CME64
1
@ shadow0359 Un peu tard, mais pour quiconque lit ceci, le serveur Web n'est pas seulement le logiciel. Cela peut aussi signifier le matériel physique, l'ordinateur sur lequel le logiciel est exécuté
Christoffer
25

Je dirais que 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é "An Intro to Node.js" :

Node.js fait partie de l'environnement d'exécution et de la bibliothèque de composants pour la création d'applications réseau à l'aide de JavaScript côté serveur. Il utilise le moteur d'exécution JavaScript de Chrome pour exécuter le code JS directement sans avoir besoin du bac à sable du navigateur.

L'Encyclopédie PCMAG.COM fournit également la définition suivante de «moteur d'exécution»:

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

L' article de Wikipédia intitulé "Système d'exécution" déclare également:

Un système d'exécution (également appelé système d'exécution, environnement d'exécution ou simplement runtime) implémente le comportement de base d'un langage informatique, que le langage soit un langage compilé, un langage interprété, un langage intégré spécifique à un domaine ou qu'il soit appelé via une API tout comme pthreads.

... Un système d'exécution peut implémenter le comportement de tâches telles que le dessin de texte à l'écran ou l'établissement d'une connexion Internet. Il agit également généralement comme une couche d'abstraction qui masque la complexité ou les variations des services offerts par le système d'exploitation.

Eh bien, existe-t-il des environnements d'exécution (ou même des plates-formes logicielles) comme Node.js? Je suppose que JRE est un bon exemple d'un tel environnement. Node.js et JRE - ils ont de nombreux points communs. Ils ont tous (une sorte de) machine virtuelle, une bibliothèque de classes et un framework pour implémenter de nombreux types d'applications, y compris des applications CLI.

Donc, pour revenir à votre question, pouvons-nous dire que Node.js est un serveur Web? Changeons "Node.js" par "JRE" et répondons si JRE est un serveur Web. La réponse est non.

Tout ce que nous pouvons dire, c'est que Node.js est un environnement d'exécution que l'on peut utiliser pour implémenter un serveur Web. Eh bien, c'est mon avis.

ezpresso
la source
Vous ignorez le but d'avoir ce runtime en premier lieu - ainsi que l'inutilité de l'avoir sans tous les modules [ nodejs.org/docs/latest-v9.x/api/] essentiels pour faire quelque chose de vraiment utile.
Tronc du
19

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

NodeJS

  1. [Environnement d'exécution Javascript (moteur Chrome v8) + bibliothèque de nœuds / API]
  2. Peut créer un serveur Web, peut également être décrit comme un serveur d'application

Express

  1. Framework 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 de nœuds en tant que serveur proxy pour servir des fichiers statiques et d'autres éléments tels que la mise en cache, le routage, etc.

Esakki Krishnan
la source
1
plus un pour mentionner que NodeJS peut être utilisé à la fois pour un serveur Web et un serveur d'applications, et pour mentionner Express.
Yahya
16

Je classerais node.js comme une infrastructure de serveur, avec des packages disponibles qui peuvent l'utiliser comme serveur HTTP, ou 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 charge HTTP et le proxy inverse sur plusieurs machines exécutant votre application serveur.

cmv
la source
1
Oui. Un framework Web vous aide à écrire une application Web, qui utilise HTML et JavaScript pour l'interface utilisateur, et communique via HTTP. Des exemples de framework web seraient Express pour node.js ou Django pour Python.
cmv
La meilleure réponse de toutes les tentatives. +1.
Tronc
Je suppose que coller ngnix ne serait pas une solution appropriée, nous pouvons utiliser un proxy hs pour une solution d'équilibrage de charge
Kartikeya Sharma
@cmv désolé je suis en retard pour la conversation !!! Devez-vous mettre nginx devant le nœud mais un Load Balancer dessus? Puis-je simplement placer l'équilibreur de charge devant l'instance EC2 et en finir avec lui pour le laisser acheminer uin straigt jusqu'au nœud et exprimer les points de terminaison?
lopezdp
4

Comment je ressens ta douleur!

Comme beaucoup, j'ai eu du mal à accéder à l'essence de Node.js car la plupart des gens n'écrivent / ne 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 principal. objectif. Je dois dire que je pense que c'est fou pour les gens de dire que Node n'est qu'un runtime JavaScript. L'utilisation de JavaScript par Node - et sa sélection du runtime V8 - sont simplement des moyens pour atteindre une fin , les meilleurs outils pour le problème que les développeurs de Node voulaient résoudre.

L'objectif principal de Node était de rendre la gestion des événements utilisateur dans une application Web plus efficace. Donc Node est massivementutilisé sur le back-end d'une application Web. La gestion des événements exige que quelque chose écoute sur la machine serveur ces événements utilisateur. Un serveur http doit donc être configuré pour acheminer chaque événement vers son script de gestionnaire approprié. Node fournit un cadre pour configurer rapidement un serveur pour écouter sur un port dédié les demandes des utilisateurs. Node utilise JavaScript pour la gestion des événements car JavaScript a des fonctions de rappel: cela permet à une tâche d'être suspendue jusqu'à ce que le résultat d'une tâche dépendante soit renvoyé. Peu d'autres langues ont cette fonctionnalité et celles qui en ont peuvent ne pas avoir d'interprète aussi efficace que le moteur d'exécution V8 de Google. La plupart des développeurs Web connaissent JavaScript, il n'y a donc pas d'apprentissage de langue supplémentaire avec Node. De plus, avoir des fonctions de rappel permet de mettre toutes les tâches utilisateur sur un seul threadsans que le blocage explicite ne soit appliqué aux tâches exigeant un accès à la base de données ou au système de fichiers. Et c'est ce qui conduit à l'efficacité d'exécution supérieure de Node sous une utilisation simultanée intensive - l'objectif principal de son développement.

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

Les demandes des utilisateurs traitées via Node seront des éléments nécessaires à l'application Web, comme l'authentification, les requêtes de base de données, la gestion de contenu (Strapi CMS), etc. Tout cela sera envoyé au port Node. (Lorsque l'analyse des données obtenues à partir 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 utilisateur plus simples.) Autres types de requêtes utilisateur, par exemple pour charger une autre page Web , téléchargez les fichiers CSS / JS / image, etc., continueront à être envoyés par le navigateur au (x) port (s) par défaut de la machine serveur où le programme du serveur Web (Apache, NGinx, etc.) les gérera.

Ainsi, en pratique , Node est principalement un framework pour la création rapide de serveurs et la gestion des événements, mais qui ne remplace que certaines des fonctions du programme de serveur Web.

D'autres utilisations non-backend de Node exploitent simplement l'une ou l'autre de ses fonctionnalités, par exemple le moteur V8. Par exemple, les outils de construction frontale Grunt et Gulp utilisent Node.js pour traiter un script de construction qui peut être codé pour convertir SASS en CSS, réduire les fichiers CSS / JS, optimiser la taille / le chargement de l'image, etc. Mais ce genre de travail est vraiment juste l'utilisation de sous-produits de Node, et non son utilisation principale qui est de créer des processus backend efficaces pour les applications Web.

Tronc
la source
2

Le serveur Web est quelque chose qui sert ses clients via Internet via des protocoles et Web Framework est quelque chose comme ce que nous appelons en tant que compilateur. Il comprend toutes les bibliothèques requises, les règles de syntaxe, etc.

Et node.js est un framework !!

Codeur fou.
la source
2
Mais Node n'inclut-il pas des modules (par exemple http) conçus pour permettre de coder rapidement son propre serveur?
Tronc du
1

Je pense que le problème est que la terminologie de "serveur Web" ou "serveur d'applications Web" est dominée par le monde JEE, et les produits, qui ne sont pas aussi modulaires que le monde Javascript actuel des frameworks, qui à leur tour peuvent être plus ou moins combinés librement.

Je ne vois aucune raison pour laquelle une technologie, qui peut servir des applications complexes sur le Web, ne devrait pas être appelée un serveur Web ou un serveur d'applications Web!

Si vous combinez, disons Nuxt en tant qu'interface , avec Feathers en tant que backend - vous aurez un backend servant une API REST et une interface utilisateur rendue côté serveur!

Bien sûr, vous pourriez (mal) utiliser cela pour servir du contenu statique - alors je l'appellerais un serveur Web, ou vous pourriez l'utiliser pour créer et servir une application complète - alors je l'appellerais un serveur d'applications Web.

Ce sont les caractéristiques ou qualités combinées qui se résument à un objectif, n'est-ce pas? - Des fonctionnalités telles que la stabilité, l'évolutivité, etc. Pour l'instant, ils sont encore assez récents.

cslotty
la source
0

Je viens d'utiliser Node.js pour la première fois pour créer un bot Discord. Ma pensée était "Wow, Node.js est un serveur? Je pensais que c'était une bibliothèque JS!" Ou peut-être aurais-je pu y penser comme un cadre.

Est-ce un serveur Web? Non, mais vous pouvez en faire un avec. Est-ce un serveur? Comme dans le logiciel qui reçoit les requêtes et sert le résultat? Oui.

Dans mon cas, j'ai émis la commande: node index.js

Et maintenant, Node.js attend les demandes de réponse (via mon bot). C'est un serveur, mais il ne sert pas de pages Web.

Rick Henderson
la source
-1

Non, c'est un environnement d'exécution ... donc ce n'est pas un serveur Web mais il n'en a pas besoin pour fonctionner. C'est donc probablement pourquoi cela pourrait prêter à confusion. Il peut fonctionner de manière autonome sans avoir besoin d'un serveur Web car il s'agit d'un moteur d'exécution lui-même, mais encore une fois, ce n'est pas un serveur Web.

bloqué
la source
1
Je pense que cette réponse - bien que techniquement vraie - est trop brève et non informative pour un newbee.
Tronc du