đź“° Un coup d'oeil sur NodeJS

📅 September 10th, 2014 ⏲️ 2 mins 41 secs

Nodejs est une plateforme d’application libre qui nous aide Ă  rĂ©aliser des applications rĂ©seaux. Elle est crĂ©Ă©e par Ryan Lienhart Dahl en 2009 au sien de l’entreprise Joyent. Node s’appuie sur le moteur Javascript de Google V8, l’idĂ©e est d’utiliser des IO non bloquantes pour gĂ©rer toutes les requĂŞtes entrantes, sortantes ainsi que tout le processus liĂ© Ă  la requĂŞte.
Le fonctionnement d’un serveur Apache: Chaque requĂŞte HTTP entrante se voit allouer une tâche. Celui-ci est utilisĂ© pendant toute la durĂ©e du traitement de la requĂŞte : lecture/Ă©criture en base de donnĂ©es, lecture/Ă©criture dans des fichiers de logs ou autres, exĂ©cution de code… Ainsi, si notre code cĂ´tĂ© serveur fait un accès Ă  la base de donnĂ©es, celui-ci attend une rĂ©ponse. De plus, durant toute la durĂ©e de la requĂŞte, le client sera bloquĂ©, en attendant la rĂ©ponse du serveur.
Node est parmis les serveurs dits non bloquants comme Netty ou Deft pour ceux qui tournent sur JVM adoptent une autre approche. Node n’utilise qu’un seul thread pour gérer les requêtes entrantes. De plus, il ne propose pas, dans ses API, de fonctions bloquantes. Ainsi, tout notre code est asynchrone. L’avantage immédiat à cela est la simplification de la gestion de la concurrence dans les applications Nodejs qui n’est plus gérée par le développeur mais directement par l’OS.
Concrètement, toutes les fonctions fournies par Node prennent en paramètre un callback. Une fois que la fonction aura terminé son traitement, le callback sera appelé avec le résultat en paramètre et une éventuelle erreur. Ainsi, pendant toute la durée du traitement, le thread sera relâché et pourra être donné à une autre requête pour effectuer un autre traitement. Nous sommes donc face à un système évènementiel. Et Javascript est un très bon choix de langage du fait que l’on peut programmer de manière fonctionnelle avec celui-ci. Les callbacks dans tous les sens, nous connaissons très bien avec des librairies comme jQuery qui nous habituent depuis déjà quelques temps à ce type de développement.
Juste pour pinailler , il y a quand même un élément de la bibliothèque Node qui est bloquant à savoir require (module compatible commonJS) qui fait un appel synchrone pour récupérer la dépendance demandée. D’ailleurs, lors d’une séance de questions/réponses donnée il y a quelques mois, Ryan Dahl (le créateur de Node) a admis qu’il serait possible de rendre cela asynchrone mais que cela n’avait pas forcément un sens puisqu’on pouvait considérer cela comme un prérequis de développement.
Ceci est un exemple d’une application Node qui permet de crĂ©er facilement un serveur web sans passer par Apache ou Lighttpd. Je vous invite Ă  le dĂ©couvrir dans le site officiel http://nodejs.org/ 

var http = require('http');
var server = http.createServer(function(request, response){
    response.writeHead(200, {'Content-Type': 'text/plain'});
    response.end('Welcome to Node JS\n');
});
server.listen(3000);
console.log('Adresse du serveur: http://localhost:3000/');