Comprendre node.js

 

 
Un jeu vidéo sans possibilité de jouer en réseau est aujourd’hui un handicap. Node.js n’est à proprement parler pas un serveur de jeu vidéo, cependant il peut vous aider à en créer un. J’entame donc une série d’articles consacrés à l’utilisation de Node.js dans le cadre d’un jeu vidéo en réseau. Ce premier article vous détaille la philosophie de node.js.
 

 

Node.js, c’est quoi ?

Node.js est conçu pour écrire des applications réseaux évolutives et flexibles avec du code javascript côté serveur. Nous avons l’habitude d’exécuter du code javascript côté client, avec node.js on peut aussi le faire côté serveur. Il est ainsi possible de créer un serveur http au même titre qu’Apache ou IIS.

 

Comment fonctionne Node.js ?

 

Les serveurs http avec du code synchrone

Imaginez le code Javascript suivant :

var result = database.query("SELECT * FROM maTable");
console.log("Hello World"); 

Faites abstraction de la manière dont la requête SQL est exécutée, imaginez simplement qu’elle renvoie une multitude de lignes.

Si on exécute ce code tel qu’il est :
– la requête SQL va s’exécuter;
– lorsque l’exécution de la requête est terminée, la console affiche Hello World.

Sur un serveur type Apache, si on exécute le même type de programme en php ou en java côté serveur, le message Hello World n’est vu que lorsque la requête a terminé son exécution.

S’il y a un grand nombre d’enregistrements, cela peut être très long. Toutefois, les autres utilisateurs du serveur ne sont pas affectés par cette longue requête puisque les serveurs http sont multithreadés : à chaque requête d’un utilisateur correspond un thread dédié.

 

Node.js avec du code asynchrone

Node.js fonctionne différemment, un unique processus est démarré et toutes les requêtes s’exécutent dans ce même processus.

De ce fait, l’exécution du code précédent en version Javascript sur un serveur Node.js a un impact sur tous les autres utilisateurs.

Pour éviter ce problème, Node.js utilise des appels asynchrones.

Pour mieux comprendre, nous transformons notre code Javascript du début par celui-ci :

database.query("SELECT * FROM maTable", function(rows) {
  var result = rows;
});
console.log("Hello World");

Dans cet exemple la fonction database.query prend en paramètres une requête SQL et une fonction anonyme.

Ici, la fonction database.query n’est pas bloquante : console.log(« Hello World ») est exécutée quasi immédiatement car la requête SQL est exécutée de manière asynchrone. La fonction anonyme, quant à elle, n’est appelée que lorsque la requête SQL est terminée.

A l’inverse dans le premier exemple, la requête SQL est exécutée puis uniquement lorsque l’exécution SQL est terminée, Hello World est écrit dans la console. Le code est synchrone : pour exécuter l’instruction suivante, l’instruction précédente doit avoir son exécution terminée.

 

Quel intérêt d’utiliser node.js ?

Plateforme light par excellence, node.js bénéficie d’un système de gestion de package nommé npm qui met à votre disposition toute une série de modules/fonctionnalités facilitatrices du travail de codage. Vous n’avez pas à réinventer la roue, elle est probablement déjà là.

Par ailleurs, node.js n’a aucun intérêt si ce n’est que pour servir des pages html statiques ou si vous effectuez des traitements lourds côté serveur. En effet, les gros calculs sont mobilisateurs de ressources et donc pourraient nuire aux autres utilisateurs du fait de temps de réponse allongés.

Enfin et vous l’avez probablement remarqué, node.js c’est du code javascript.

 

Le mot de la fin

La philosophie de node.js tient en quelques mots, et n’a rien de complexe. Par contre elle nécessite un autre mode de développement.
Vous souhaitez aller plus loin avec node.js, le tuto Installer node.js est fait pour vous.

 

Posté dans node.jsTagged code asynchrone, javascript, node.js, serveur http  |  23 commentaires

23 réponses à "Comprendre node.js"

Répondre