Comprendre node.js (Mise à jour 27/06/2015)




 

 
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.

 

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.

 

Posté dans node.jsTaggé code asynchrone, javascript, node.js, serveur http  |  17 commentaires

17 réponses à "Comprendre node.js (Mise à jour 27/06/2015)"

Répondre

*