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.

Offre de stage – Développeur junior application web sur Montreuil

Offre de stage – Développeur junior application web sur Montreuil

  • Titre: Développeur junior application web
  • L’entreprise: Hedera Technology (http://hederatech.com) est un éditeur concevant des solutions innovantes de management d’infrastructures informatiques. Après deux ans de R&D, notre solution KANOPYA aide les responsables SI à optimiser l’administration et le fonctionnement de leurs serveurs, notamment grâce à un module d’intelligence artificielle.
    Notre philosophie d’entreprise est ancrée dans le développement durable et l’open-source.Notre équipe sera heureuse de répondre à vos questions et de vous accueillir au sein d’une structure a taille humaine, organisée autour de la méthodologie SCRUM dans un contexte d’innovation ouverte.

    Démonstration des bénéfices de notre solution par des LEGOs: http://www.youtube.com/watch?v=HrTrtO4gvcc

    Ce que l’on dit de nous sur le web: http://www.scoop.it/t/hedera-technology

Profil Recherché

  • Profil recherché:
    • Jeune développeur web enthousiaste en M1 ou M2, vous êtes à la recherche d’un environnement de travail dynamique et prospectif, caractéristique des start-ups.
    • Vous avez développé des projets d’applications métiers Web dans un framework type Django, Ruby on Rails, Zend, Zope ou autres.
    • Vous appréciez le potentiel du JavaScript et vous souhaitez vous perfectionner dans ce langage, épine dorsale d’un web toujours plus dynamique. Le domaine des API REST vous intéresse également.
    • Vous intégrez une équipe d’experts spécialistes de l’administration Linux et du café bien dosé. Dans cet environnement résolument technophile, vous travaillez sur l’interface web de Kanopya aux côtés de notre chef de projet dédié à la partie web qui vous fera bénéficier de son expérience.
    • Vous participez aux réunions SCRUM pour faire partager à l’équipe votre vision du développement web pointu et êtes force de proposition pour explorer et valider les outils que vous jugerez pertinents pour notre Rich Internet Application..
  • Compétences Techniques Requises:
    • Le Javascript s’impose pour le développement de notre interface web.
    • Environnement technique : « Serverside JS, AJAX, HMTL5 Modèle MVC, Single Page App, WebSocket / Real-time apps »
    • Parmi les challenges à relever aux côtés de l’équipe :
      • Contribuer au développement de l’API REST
      • Représenter de façon visuellement attractive les données (conso énergétique, CPU … )
      • Développer le FrontEnd des modules du cœur de Kanopya en collaboration avec les équipes BackEnd
      • Développer l’interface du portail client self-service de VM avec objectif de simple « Drag&Drop »
    • Nous définirons ensemble les sujets qui vous intéressent le plus.
  • Expérience Requise:  1 XP/projet en développement JavaScript
  • Disponibilité:Janvier

Conditions d’embauche

  • Lieu :Montreuil (proche M1 et 9+ Rer C)
  • Rémunération: 800 à 1000€
  • Contrat: Stage (6 mois)

Pour postuler

  • Contact:
    • Envoyez nous votre CV et lettre de motivation personnalisée par mail àrecrutement@hederatech.com
    • Vous pouvez me joindre au 09 81 97 29 39 pour avoir plus d’informations sur notre projet ou notre entreprise.