Maison >interface Web >js tutoriel >Qu'est-ce que Node.js exactement ? Quels sont les avantages de Node.js ? _node.js
Node est un interpréteur JavaScript côté serveur qui changera le concept du fonctionnement des serveurs. Son objectif est d'aider les programmeurs à créer des applications hautement évolutives et à écrire du code capable de gérer des dizaines de milliers de connexions simultanées à une (et une seule) machine physique.
Présentation
Si vous avez entendu parler de Node ou lu des articles vantant à quel point Node est génial, vous vous demandez peut-être : "Qu'est-ce que Node ? Même après avoir consulté la page d'accueil de Node, vous ne comprenez peut-être toujours pas ce qu'est Node ? » Le nœud est-il ? Node n'est certainement pas destiné à tous les programmeurs, mais c'est peut-être quelque chose avec lequel certains programmeurs ont du mal.
Pour tenter d'expliquer ce qu'est Node.js, cet article fournira brièvement quelques informations de base : le problème qu'il résout, comment il fonctionne, comment exécuter une application simple et enfin, quand Node est une bonne solution. Cet article n'explique pas comment écrire une application Node complexe, ni un didacticiel Node complet. La lecture de cet article devrait vous aider à décider si vous devez continuer à apprendre Node afin de pouvoir l'utiliser pour votre entreprise.
Quel problème Node est-il conçu pour résoudre ?
L'objectif déclaré de Node est de « viser à fournir un moyen simple de créer des programmes réseau évolutifs ». Quel est le problème avec le programme serveur actuel ? Faisons un problème de mathématiques. Dans des langages comme Java™ et PHP, chaque connexion génère un nouveau thread, et chaque nouveau thread peut nécessiter 2 Mo de mémoire associée. Sur un système doté de 8 Go de RAM, le nombre maximum théorique de connexions simultanées est de 4 000 utilisateurs. À mesure que votre clientèle grandit, vous devez ajouter davantage de serveurs si vous souhaitez que votre application Web prenne en charge davantage d'utilisateurs. Bien entendu, cela augmentera les coûts tels que les coûts des serveurs, les coûts de trafic et les coûts de main d’œuvre. En plus de ces coûts croissants, il existe également un problème technique potentiel lié au fait que les utilisateurs peuvent utiliser un serveur différent pour chaque requête, de sorte que toutes les ressources partagées doivent être partagées sur tous les serveurs. Pour toutes les raisons ci-dessus, le goulot d'étranglement dans l'ensemble de l'architecture des applications Web (y compris le trafic, la vitesse du processeur et la vitesse de la mémoire) est le nombre maximum de connexions simultanées que le serveur peut gérer.
La solution de Node à ce problème consiste à modifier la façon dont il se connecte au serveur. Au lieu de générer un nouveau thread de système d'exploitation pour chaque connexion (et de lui allouer de la mémoire), chaque connexion émet un événement qui s'exécute dans un processus du moteur Node. Node affirme qu'il ne peut jamais se bloquer car il n'autorise pas du tout les verrous et ne bloque pas directement les appels d'E/S. Node affirme également que les serveurs sur lesquels il s'exécute peuvent prendre en charge des dizaines de milliers de connexions simultanées.
Maintenant que vous disposez d’un programme capable de gérer des dizaines de milliers de connexions simultanées, que pouvez-vous réellement construire avec Node ? Ce serait effrayant si vous aviez une application Web qui devait gérer autant de connexions ! C'est un problème du genre "si vous avez ce problème, ce n'est pas un problème du tout". Avant de répondre à la question ci-dessus, examinons comment fonctionne Node et comment il est conçu pour fonctionner.
Node n'est décidément pas quoi ?
Oui, Node est un programme serveur. Cependant, le produit Node de base n'est certainement pas comme Apache ou Tomcat. Essentiellement, ces serveurs sont des produits serveur « prêts à installer », permettant aux applications d'être déployées immédiatement. Avec ces produits, vous pouvez avoir un serveur opérationnel en moins d’une minute. Node n'est certainement pas ce produit. Semblable à Apache, qui permet aux développeurs de créer des pages Web dynamiques en ajoutant un module PHP et un module SSL pour implémenter des connexions sécurisées, Node dispose également d'un concept de module qui permet d'ajouter des modules au noyau de Node. Il existe littéralement des centaines de modules parmi lesquels choisir pour Node, et la communauté est très active dans la création, la publication et la mise à jour de modules, et peut même gérer des dizaines de modules par jour. L'ensemble de la partie module de Node sera abordé plus loin dans cet article.
Comment fonctionne Node ?
Le nœud lui-même exécute le JavaScript V8. Attendez, JavaScript sur le serveur ? Oui, vous avez bien lu. JavaScript côté serveur est peut-être un nouveau concept pour les programmeurs qui utilisent uniquement JavaScript sur le client, mais le concept lui-même n'est pas exagéré, alors pourquoi le même langage de programmation utilisé sur le client ne peut-il pas être utilisé sur le serveur ?
Qu'est-ce qu'un V8 ? Le moteur JavaScript V8 est le moteur JavaScript sous-jacent utilisé par Google pour son navigateur Chrome. Peu de gens réfléchissent à ce que JavaScript fait réellement sur la machine client ? En fait, le moteur JavaScript se charge d’interpréter et d’exécuter le code. À l'aide de la V8, Google a créé un interpréteur ultra-rapide écrit en C qui possède une autre fonctionnalité unique : vous pouvez télécharger le moteur et l'intégrer dans n'importe quelle application. Le moteur JavaScript V8 ne se limite pas à fonctionner dans un seul navigateur. Node prend donc en fait le moteur JavaScript V8 écrit par Google et le reconstruit pour qu'il fonctionne sur le serveur. C'est parfait ! Pourquoi créer un nouveau langage quand une bonne solution est déjà disponible ?
Programmation événementielle
De nombreux programmeurs ont été formés pour croire que la programmation orientée objet est la conception de programmation parfaite, ce qui les rend dédaigneux des autres méthodes de programmation. Node utilise un modèle de programmation dit événementiel.
Listing 1. Programmation événementielle utilisant jQuery sur le client
// Lorsqu'un bouton est enfoncé, un événement se produit - gérez-le
// directement ici dans une fonction anonyme, où tous les
// les variables nécessaires sont présentes et peuvent être référencées directement
$("#myButton").click(function(){
Si ($("#myTextField").val() != $(this).val())
alert("Le champ doit correspondre au texte du bouton");
});
En fait, il n'y a aucune différence entre le côté serveur et le côté client. Oui, il n'y a pas de bouton cliquant ou tapant dans le champ de texte, mais à un niveau supérieur, des événements se produisent. Une connexion s'établit, c'est un événement ! Les données sont reçues via la connexion, ce qui est aussi un événement ! Les données cessent de circuler via la connexion, cela reste un événement !
Pourquoi ce type de configuration est-il idéal pour Node ? JavaScript est un excellent langage de programmation événementiel car il permet l'utilisation de fonctions et de fermetures anonymes et, plus important encore, sa syntaxe est familière à quiconque a écrit du code. La fonction de rappel appelée lorsqu'un événement se produit peut être écrite au point où l'événement est capturé. Cela rend le code facile à écrire et à maintenir, sans frameworks orientés objet complexes, sans interfaces et sans possibilité de sur-ingénierie. Écoutez simplement l'événement, écrivez une fonction de rappel et laissez le système gérer tout le reste !
Exemple d'application de nœud
Enfin, regardons du code ! Rassemblons tout ce dont nous avons discuté pour créer notre première application Node. Nous savons déjà que Node est idéal pour gérer des applications à fort trafic. Nous allons donc créer une application Web très simple, conçue pour une vitesse maximale. Voici les exigences spécifiques du « patron » pour notre exemple d'application : Créez une API RESTful de générateur de nombres aléatoires. Cette application doit accepter une entrée : un paramètre nommé "numéro". L'application renvoie ensuite un nombre aléatoire compris entre 0 et ce paramètre et renvoie le numéro obtenu à l'appelant. Puisque le « patron » souhaite que l'application devienne une application très populaire, elle devrait être capable de gérer 50 000 utilisateurs simultanés. Jetons un coup d'œil au code suivant :
Listing 2. Générateur de nombres aléatoires de nœuds
// La ligne la plus importante de tout fichier Node. Cette fonction
// effectue le processus réel de création du serveur. Techniquement,
// Node indique au système d'exploitation sous-jacent que chaque fois qu'un
// la connexion est établie, cette fonction de rappel particulière devrait être
// exécuté. Puisque nous créons un service Web avec l'API REST,
// nous voulons un serveur HTTP, qui nécessite la variable http
// nous avons créé dans les lignes ci-dessus.
// Enfin, vous pouvez voir que la méthode de rappel reçoit une 'requête'
// et l'objet 'response' automatiquement. Cela devrait être familier
// à n'importe quel programmeur PHP ou Java.
http.createServer(function(demande, réponse) {
// La réponse doit gérer tous les en-têtes et les codes retour
// Ces types de choses sont gérés automatiquement dans les programmes serveur
// comme Apache et Tomcat, mais Node exige que tout soit fait soi-même
réponse.writeHead(200, {"Content-Type": "text/plain"});
// Voici un code unique. C'est ainsi que Node récupère
// paramètres transmis à partir des requêtes client. Le module URL
// gère toutes ces fonctions. La fonction d'analyse
// déconstruit l'URL et place les valeurs-clés de la requête dans le
// objet de requête. On peut trouver la valeur de la clé "numéro"
// en le référençant directement - la beauté de JavaScript.
var params = url.parse(request.url, true).query;
var entrée = params.number;
// Ce sont les méthodes JavaScript génériques qui créeront
// notre numéro aléatoire qui est renvoyé à l'appelant
var numInput = nouveau Nombre(entrée);
var numOutput = new Number(Math.random() * numInput).toFixed(0);
// Écrivez le nombre aléatoire dans la réponse
réponse.write(numOutput);
// Node nous demande de mettre explicitement fin à cette connexion. C'est parce que
// Node vous permet de maintenir une connexion ouverte et de transmettre des données dans les deux sens,
// bien que ce sujet avancé ne soit pas abordé dans cet article.
réponse.end();
// Lorsque nous créons le serveur, nous devons explicitement connecter le serveur HTTP à
// un port. Le port HTTP standard est 80, nous allons donc le connecter à celui-ci.
}).écouter(80);
// Sortie d'une chaîne sur la console une fois le serveur démarré, nous permettant de tout savoir
// démarre correctement
console.log("Générateur de nombres aléatoires en cours d'exécution...");
启动应用程序
将上面的代码放入一个名为 « random.js » Il y a 80 années de connexion HTTP par rapport à la version HTTP. Il s'agit de % node random.js.
Accéder à l'application
L'application est opérationnelle. Node écoute toutes les connexions, testons-le. Depuis que nous avons créé une simple API RESTful, l'application est accessible à l'aide d'un navigateur Web. Tapez l'adresse suivante (assurez-vous d'avoir suivi les étapes ci-dessus) : http://localhost/?number=27.
La fenêtre de votre navigateur affichera un nombre aléatoire compris entre 0 et 27. Cliquez sur le bouton "recharger" de votre navigateur et vous obtiendrez un autre numéro aléatoire. Ça y est, votre première application Node !
A quoi sert Node ?
À ce stade, vous pourrez peut-être répondre à la question « Qu'est-ce que Node », mais vous pourriez aussi avoir une autre question : « À quoi sert Node ? » C'est une question importante à poser car il y a certainement quelque chose qui se passe. pourrait en bénéficier sur Node.
A quoi ça sert ?
Comme vous l'avez vu précédemment, Node est idéal pour les situations où vous prévoyez un trafic potentiellement élevé, mais pas nécessairement beaucoup de logique et de traitement côté serveur requis avant de répondre au client. Des exemples typiques d'excellence de Node incluent :
API RESTful
Un service Web qui fournit une API RESTful reçoit plusieurs paramètres, les analyse, assemble une réponse et renvoie une réponse (généralement moins de texte) à l'utilisateur. C'est une situation idéale pour Node car vous pouvez le créer pour gérer des dizaines de milliers de connexions. Cela ne nécessite toujours pas beaucoup de logique ; il recherche simplement certaines valeurs dans une base de données et les compose dans une réponse. Étant donné que les réponses sont de petites quantités de texte et que les requêtes entrantes sont de petites quantités de texte, le trafic n'est pas élevé et une seule machine peut gérer les besoins en API même des entreprises les plus occupées.
File d'attente Twitter
Imaginez une entreprise comme Twitter qui doit recevoir des tweets et les écrire dans une base de données. En réalité, avec près de milliers de tweets arrivant par seconde, il est impossible pour la base de données de gérer en temps opportun le nombre d’écritures requises pendant les heures de pointe. Node devient un élément important de la solution à ce problème. Comme vous pouvez le constater, Node peut gérer des dizaines de milliers de tweets entrants. Il les écrit rapidement et facilement dans un mécanisme de file d'attente en mémoire (tel que memcached), à partir duquel un processus distinct peut les écrire dans la base de données. Le rôle de Node est ici de collecter rapidement les tweets et de transmettre ces informations à un autre processus chargé de la rédaction. Imaginez une conception alternative (dans laquelle un serveur PHP classique essaierait de gérer lui-même les écritures dans la base de données) : chaque tweet entraînerait un court délai d'écriture dans la base de données car l'appel à la base de données bloque le canal. Une machine conçue de cette manière pourrait ne pouvoir gérer que 2 000 tweets entrants par seconde en raison de la latence de la base de données. Le traitement d'un million de tweets par seconde nécessiterait 500 serveurs. Au lieu de cela, Node gère chaque connexion sans bloquer le canal, ce qui lui permet de capturer autant de tweets que possible. Une machine Node capable de gérer 50 000 tweets ne nécessite que 20 serveurs.
Statistiques du jeu vidéo
Si vous avez joué au jeu Call of Duty en ligne, vous réaliserez immédiatement quelque chose lorsque vous regardez les statistiques du jeu : pour générer ce niveau de statistiques, vous devez suivre une énorme quantité d'informations. De cette façon, si des millions de joueurs jouent en ligne en même temps et qu’ils occupent des positions différentes dans le jeu, une énorme quantité d’informations peut être générée très rapidement. Node est une excellente solution pour ce scénario car il ingère les données générées par le jeu, effectue une fusion minimale des données, puis met les données en file d'attente afin qu'elles puissent être écrites dans la base de données. Utiliser un serveur entier pour suivre le nombre de balles qu'un joueur tire dans un jeu semble idiot, et si vous utilisez un serveur comme Apache, il peut y avoir des limitations utiles, mais à l'inverse, si vous utilisez un serveur dédié pour suivre toutes les statistiques d'un jeu ; , comme vous le feriez avec un serveur exécutant Node, cela semble être une décision judicieuse.
Module de nœud
Bien qu'il ne s'agisse pas du sujet original de cet article, cet article a été développé pour inclure une introduction aux modules Node et au Node Package Manager en raison de son lectorat populaire. Tout comme les développeurs habitués à utiliser Apache, vous pouvez également étendre les fonctionnalités de Node en installant des modules. Cependant, les modules disponibles pour Node améliorent considérablement le produit, et ces modules sont si utiles que les développeurs qui utiliseront Node en installeront généralement plusieurs. Par conséquent, les modules deviennent de plus en plus importants et deviennent même un élément clé de l’ensemble du produit.
Dans la section "Références", j'ai fourni un lien vers la page des modules, qui répertorie tous les modules disponibles. Pour démontrer les possibilités que peuvent offrir les modules, j'ai inclus les modules suivants parmi les dizaines disponibles : un pour écrire des pages créées dynamiquement (comme PHP), un pour simplifier l'utilisation de MySQL, et un pour aider à utiliser les WebSockets, et un module pour aider à l'analyse du texte et des paramètres. Je n'entrerai pas dans les détails de ces modules car cet article de présentation est destiné à vous aider à comprendre Node et à déterminer si vous avez besoin d'en apprendre plus en profondeur (à nouveau), et si vous le faites, alors vous aurez certainement l'opportunité d'utiliser le modules disponibles.
En outre, une fonctionnalité de Node est le module de package Node, qui est une fonctionnalité intégrée pour l'installation et la gestion des modules Node. Il gère les dépendances automatiquement, vous pouvez donc être sûr : tout module que vous souhaitez installer sera installé correctement et inclura les dépendances nécessaires. Il prend également en charge la publication de vos propres modules dans la communauté Node, si vous choisissez de rejoindre la communauté et d'écrire vos propres modules. Vous pouvez considérer NPM comme une méthode qui vous permet d'étendre facilement les fonctionnalités de Node sans vous soucier de casser votre installation de Node. De même, si vous choisissez de vous lancer dans Node, NPM sera un élément important de votre solution Node.
Conclusion
Après avoir lu cet article, la question que vous vous posiez au début de cet article « Qu'est-ce que Node.js exactement ? » aurait dû trouver une réponse, et vous devriez être en mesure de répondre à cette question en quelques phrases claires et concises. Si tel est le cas, vous êtes déjà en avance sur de nombreux programmeurs. J'ai parlé de Node à beaucoup de gens, mais ils ont toujours été confus quant à l'utilisation réelle de Node. Naturellement, ils ont une façon de penser Apache, où le serveur est une application, vous y mettez un fichier HTML et tout fonctionne. Étant donné que la plupart des programmeurs connaissent Apache et ses utilisations, la façon la plus simple de décrire Node est de le comparer à Apache. Node est un programme qui peut faire tout ce qu'Apache peut faire (avec l'aide de quelques modules), et bien plus encore en tant que plate-forme JavaScript extensible sur laquelle vous pouvez vous appuyer.
Comme vous pouvez le voir dans cet article, Node atteint son objectif de fournir un serveur hautement évolutif. Il utilise un moteur JavaScript très rapide de Google, le moteur V8. Il utilise une conception basée sur les événements pour garder le code minimal et facile à lire. Tous ces facteurs contribuent à l’objectif idéal de Node : faciliter l’écriture d’une solution hautement évolutive.
Il est tout aussi important de comprendre ce qu'est Node que de comprendre ce qu'il n'est pas. Node n'est pas seulement un remplacement d'Apache, il est conçu pour faciliter la mise à l'échelle des applications Web PHP. Rien ne pourrait être plus éloigné de la vérité. Même si Node en est encore à ses balbutiements, il se développe très rapidement, la participation de la communauté est si élevée et les membres de la communauté ont créé tellement de modules formidables que d'ici un an, ce produit en évolution pourrait être dans votre entreprise.