⏱ Time to read: 2 mins 41 secs

Un coup d'oeil sur NodeJS

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/