Archives pour la catégorie node.js

Construire un serveur web personnalisé léger en utilisant node.js

Article rédigé par Naoufal Ben Bouazza

Les serveurs Web n’ont pas besoin d’être grand, ou bien génériques. Au fil des années, ils sont devenus plus complexes, livrant toutes sortes de contenus à votre navigateur.

Alors que faire si vous avez besoin de quelque chose de précis ? Internet Information Server (IIS) et Apache sont gourmands, et même les serveurs de nouvelle génération comme nginx nécessitent des ressources importantes. C’est là qu’intervient node.js Au lieu de prendre un serveur Web existant, on vous permettant de tailler votre application autour de ses fonctionnalités et API, node.js adopte une approche très différente. Vous n’avez pas de serveur, vous avez juste un kit de pièces que vous pouvez assembler dans votre propre application web sur mesure qui gère les entrées et sorties que vous avez conçu – il s’agit d’un routeur qui prend les entrées et sorties donnée, pour vos applications web.

Un autre avantage, c’est la possibilité d’écrire des extensions pour votre serveur Web avec le langage du Web: JavaScript.

Création d’un serveur web avec Node.js

Contrairement aux serveurs web classiques, vous aurez besoin d’écrire du JavaScript pour pouvoir traiter les requêtes client, et ainsi construire de votre propre serveur Node.js. Commencez par créer un fichier appelé « server.js ».

var http = require("http");
 console.log("démarrage du serveur web");
 var host="127.0.0.1";
 var port="9999";

Nos premières lignes de code ont déclaré 4 variables clés – le protocole de notre serveur ,un message , l’hôte et le port sur ​​lequel notre serveur écoute. Nous pouvons maintenant commencer à ajouter du code pour gérer les requêtes, et les réponses. Nous pouvons le faire en une seule ligne, avec une fonction imbriquée dans un objet createServer.

http.createServer(function (request, response) {
   response.writeHead(200, {'Content-Type': 'text/plain'});
   response.end('Hello from Node.js\n');
 }).listen(port,host, function() {
   console.log("ecoute sur : + host +": "+ port");
 });

Exécuter le serveur

Le code que nous avons ajouté affiche une simple réponse http, ce qui signifie que vous avez besoin de plus que ça, afin que votre serveur puisse répondre à toutes les requêtes http, c’est ce qu’on va voir dans le prochain tutoriel. Enfin avant de se quitter lancer votre serveur avec la commande :

node server.js

Puis ouvrez votre navigateur et entrez l’url : 127.0.0.1:9999, pour voir le résultat.

 

 

Installation de node.js avec NVM

Article rédigé par Naoufal Ben Bouazza

Dans cette suite de tutoriaux d’introduction à node.js, nous allons voir comment installer node.js sur Ubuntu (Unix-like system). Pour les fans de Microsoft je tiens à vous annoncer la petite surprise qui  date de la semaine dernière et qui est le support de Node.js par l’IDE Visual Studio à travers le plugin gratuit NTVS. Pour plus d’informations, rendez-vous sur le site officiel:  https://nodejstools.codeplex.com/.

Installation de node.js avec NVM

NVM (Node Version Manager) est un outil multiplateforme pour installer Node.js, et permet de compiler Node.js manuellement. A noter qu’il est aussi possible d’installer Node.js avec le package manager de Ubuntu, cependant il n’est pas très flexible et ne permet pas toujours d’installer la dernière version. Il faut cloner le dépôt NVM à partir de Github (lien : https://github.com/creationix/nvm), et pour cela il faut au préalable installer un client Git, ainsi que curl sur votre machine Ubuntu.

1) installation de Git sur Ubuntu, ouvrez le terminal et tapez:

sudo apt-get install git

2) même chose pour installer curl:

sudo apt-get install curl

3) Une fois qu’ont à les deux outils Git et curl, on est pret à installer NVM, il faut copier cette ligne à partir du lien précedent:

curl https://raw.github.com/creationix/nvm/master/install.sh | sh

Une fois l’installation de NVM correctement terminée, vous aurez ce message:

Close and reopen your terminal to start using NVM

Fermer votre navigateur et ouvrer le à nouveau, et pour s’assurer que NVM à bien été installé, tapez dans le terminal.

nvm

Si tous marche bien une liste des options de NVM, ainsi que des exemples seront affichés.

4) une fois NVM est correctement installé, tapez dans le terminal

nvm install 0.10

5) une fois Node.js installé, tapez dans le terminal:

node

Vous serez redirigé vers l’interpréteur Node.js, et voilà !

Pour quitter l’interpréteur node, faîtes (ctrl +c 2 fois )

6) Une dernière chose avant de quitter votre terminal et finir cette première partie, il faudra définir la dernière version de node.js comme version par défaut, sinon à chaque fois que vous ouvrirez votre terminal vous n’aurez pas node.js !

nvm alias default 0.10

Enfin, pour etre sûr que cela fonctionne, fermez votre terminal, puis ouvrez-le à nouveau et taper:

node --version

Cela doit vous afficher la version utilisée.

Conclusion

Dans ce petit tutoriel, nous avons vu l’installation de Node.js avec l’outil NVM dans Ubuntu, ainsi que ses avantages par rapport au package manager.
Dans le tutoriel suivant nous allons créer notre premier serveur web HTTP avec Node.js

Introduction à Node.js

Article rédigé par Naoufal Ben Bouazza

Node.js est une nouvelle technologie très utilisée à la Silicon Valley, notamment par Microsoft, VMware, eBay, Yahoo, LinkedIn, etc …  pour n’en citer que quelques uns.

Dans cette série d’articles, on va voir comment node.js offre de nouvelles opportunités aux développeurs.

Peut-être que vous avez entendu parler de Node.js, et vous savez qu’il est utilisé pour des applications « temps réel » ou qui demande de la «haute performance », et vous savez certainement que Node.js est du JavaScript côte-serveur, mais vous n’êtes pas sûrs quand et/ou pourquoi l’utiliser, rassurez-vous dans ce tutoriel, je vais tenter de vous expliquer quand l’utiliser et pourquoi.

Quand choisir Node.js ?

A l’époque du Web 2.0, le web est devenu plus interactif. Les utilisateurs autour du monde ont besoin d’interagir entre eux et ceci en temps réel. Le tchat, les jeux en ligne, réseaux sociaux, ainsi que les outils collaboratifs  sont des applications qui demandent une communication en temps-réel entre les utilisateurs. Cette communication en « temps-réel » doit se produire à grande échelle, en supportant des millions de requêtes.

Intro à Node.JS

Node.js est un environnement créé par Rayn Dahl en 2009 qui s’appuie sur le JavaScript exécuté côté serveur. Comme le montre le schéma ci-dessous il est principalement basé sur libuv, le moteur V8 JavaScript de Google utilisé dans le navigateur Google chrome, et le langage JavaScript.

node-1

A noter que Node.js n’est pas un Framework web, pour avoir une idée sur ces différents Framework de Node.js, je vous conseille de voir ce lien : http://webapplog.com/node-js-frameworks/ parmi d’autres.

Dans ce tutoriel, j’explique brièvement la différence entre fonction bloquante et non bloquante à travers un exemple, et pour clôturer, j’expliquerai l’utilité de la boucle d’évènement dans Node.js.
Pour commencer Node.js il faut comprendre la différence entre Node.js est les environnements des langages de script exécutés côté serveur tel que PHP.

La programmation asynchrone (ou non-bloquante)

J’illustre ici le principe de la programmation bloquante et la programmation non-bloquante, avec ce pseudo-code.
Par exemple un code bloquant sera de la forme suivante :

Lire le fichier à partir du système de fichier, stocker le contenu dans "contenu"
Afficher contenu
Faire autre chose

Avec cette version on ne peut pas afficher le contenu tant que l’on a pas lu tout le contenu à partir du fichier (on ne peut pas faire autres chose tant que la lecture et l’affichage ne sont pas faits), car on a trois instructions bloquantes en série.
Une version non-bloquante du code sera de la forme suivante :

Lire le fichier à partir du système de fichier
       Et quand tu as fini, affiche contenu
Faire autre chose

Avec cette version on peut lire le contenu à partir du fichier et quand la lecture est finie on pourra l’afficher. Entre temps, on passe à l’instruction suivante sans attendre le retour de la fonction qui la précède, ce qui permet en quelque sorte un « pseudo-parallélisme » même en sachant que Node.js n’est pas multithread. Cette technique est ce qu’on appelle «callback ».

Si on veut traduire ce code bloquant, ça sera :

var contenu = fs.readFileSync('/etc/hosts');
console.log(contenu) ;
console.log('Faire autre chose');

La version non-bloquante sera :

fs.readFileSync('/etc/hosts', function(err, contenu ){
    console.log(contenu);
});
console.log('Faire autre chose');

A noter que la plupart des fonctions contenues dans Node.js sont des fonctions asynchrones (c’est-à-dire des fonctions qui ne reste pas bloquées en attendant qu’une autre fonction soit terminée). C’est pour cela que le langage JavaScript est un de ces principaux composants comme le montre le schéma précèdent, car il permet l’utilisation des fonctions callbacks.

Comme mentionné au début de cet article, node.js est un environnement, ce qui signifie que certains fonctionnalités ne sont pas accessibles avec l’installation par défaut. Il est cependant très facile de charger des librairies externes créées par la communauté pour la majorité des besoins « classiques ». La création d’un serveur web peut par exemple être facilement réalisé avec la librairie « Express ».

Boucle d’évènements (Event Loop)

Je me permets de traduire ce que Rayn Dahl a dit à propos du choix du langage JavaScript:

« Le langage JavaScript a certaines caractéristiques qui le différencie des autres langages dynamiques. Il n’a pas de concept de threads, son modèle de gestion de la concurrence est complètement basée autour des évènements. »

JavaScript nous permet de faire la programmation événementielle en utilisant la boucle d’évènements et d’écrire un code asynchrone (non-bloquant).

Alors qu’est-ce que la boucle d’évènements ?

La boucle d’évènement est une file FIFO (First-In-First-Out). Lorsqu’une fonction asynchrone est exécutée, les fonctions callbacks sont ajoutées dans la file, et le moteur JavaScript ne démarre pas le traitement de la boucle d’événements jusqu’à ce que le code qui est après la fonction asynchrone soit exécuté. Puisque la boucle d’évènement est une file (FIFO) les fonctions callbacks s’exécutent dans l’ordre où elles étaient ajoutées à la file d’attente.

Conclusion

Node.js est un environnement qui permet d’exécuter JavaScript côte serveur, offrant de hautes performances pour des applications temps-réel grâce à son modèle mono-thread.
Dans le prochain tutoriel nous allons installer Node.js via le gestionnaire de version de Node (NVM) dans un environnement Ubuntu.