nodejs-javascript

A la découverte de Node.js, première soirée

Flattr this!

J'ai passé récemment une soirée à la découverte de NodeJS. Comprendre ce que c'est, comment ça marche et ce qu'on peut en faire. Attention ceci est un compte-rendu de travail, pas un tutoriel.

NodeJS, qu'est-ce que c'est ?

Ce système a déjà fait couler beaucoup d'encre, je ne suis pas sûr qu'il soit utile de le présenter pour la énième fois. Pour les curieux, je crois que la meilleure présentation francophone qu'on puisse en faire es sur Web-Tambouille. Je vous laisse donc la découvrir.

Contexte de départ

Je me suis basé sur une VM ubuntu que je me suis créé pour l'occasion. Je ne cherchais ni performance, ni sécurité donc une distrib ubuntu de base est largement suffisante.

NodeJS a besoin de python et libssl-dev. De façon générale, le tuto d'installation sur le dépôt git de joyent est largement suffisant à l'installation.

Pour info, même si ce tuto suggère que libssl-dev n'est nécessaire que si vous voulez faire du HTTPS, mieux vaut l'installer quand même. En effet, nombreux sont les plugins qui vous le réclameront même si vous ne faites pas de HTTPS. Au pire, ça ne pèse rien et ça ne coûte que quelques secondes de l'installer.

Au passage, le tuto d'installation vous suggère d'installer la version 0.4.11. Actuellement, le dépôt en est à la version 0.5.7. Je me suis laissé tenter de charger cette version, je m'en suis mordu les doigts. Les divers plugins que j'ai voulu installer par la suite pour me faciliter le travail n'était pas (encore) compatible...

Tout à la fin du tutoriel, toujours le même, on vous suggère d'installer npm (node packets manager). Je vous le suggère aussi. C'est plus que pratique, de toute façon, je crois que peu d'utilisateurs avertis de systèmes Linux/Unix sont encore à convaincre de l'utilité des systèmes de gestion de paquets 😉

Même si NodeJS fonctionne sous Windows, je vous le déconseille sincèrement. Plein de composantes "de base" manquent à l'appel (libssl, npm entre autres). Ça devient vite plus une grosse galère qu'autre chose, on est là pour apprendre à développer pas pour essayer de patcher les manquements de NodeJS sur Windows. De toute façon, ils le disent eux même, ça fait peu de temps qu'ils travaillent à porter NodeJS sur Windows, laissons donc leur le temps de le porter à maturité.

Premiers pas applicatifs

Bon évidement, maintenant qu'on a monté le serveur, l'intérêt est de développer une application. Encore une fois, je me suis tourné vers Web-Tambouille et un autre tuto qu'ils ont publié : Première application Node.js et HTML5.

Première erreur à ne pas faire en suivant ce tutoriel : rester dans le dossier d'installation de NodeJS. En effet, ce dernier étant un serveur particulièrement léger et peu intrusif. Vous pouvez mettre à peu près vos fichiers partout où vous voulez sans rien configurer que ça marchera quand même. Je vous suggère donc fortement de créer un dossier /var/www/où vous mettrez vos sources. L'idée n'est pas de calquer le fonctionnement d'Apache mais au moins, en faisant ainsi, vous aurez un repère simple et connu.

Vu que vous avez déjà installé NodeJS, vous n'avez pas besoin d'exécuter les deux premières commandes suggérées par le tuto de Web-Tambouille. Passons directement à l'utilisation de npm. Les plugins chargés s'installent à la racine du dossier courant. Pour éviter de les installer à chaque nouveau projet, je créé donc un sous-dossier plugins et j'adapterai mes chemins en fonction. J'ai donc cette architecture de dossiers :

+ /var
    + /www
        + /monProjet
        + /plugins

Ensuite, je recopie les exemples de code et je lis avec attention les commentaires et les explications. Je pense bien à adapter mes chemins. Par exemple :

<script src="/socket.io/socket.io.js"></script>

Devient

<script src="../plugins/socket.io/socket.io.js"></script>

Au passage, ils suggèrent d'utiliser la dernière version de jQuery, à l'époque pour eux, c'était la version 1.5. Profitez en donc pour charger la dernière version actuelle du framework, soit la 1.6.4. En soit, rien de compliqué donc 😉

<script src="http://code.jquery.com/jquery-1.6.4.min.js"></script>

Pour info, voici les liens vers les sites officiels des plugins utilisés :

Résultat

Ça ne marche pas. Il y a un problème que je n'ai pas encore résolu et que l'heure tardive m'a raisonnablement poussé à laisser de côté. L'objet sock, issu de io.Socket, que nous créons côté client ne possède pas de méthode send(). Il possède bien une méthode emit() qui, pour moi et à priori, correspond mais je n'arrive à attraper que des évènements d'un client vers lui-même. Même si ce type de délégation d'évènements est intéressante, il n'est pas utile de créer un io.Socket pour ça. Surtout quand on utilise jQuery qui propose déjà un objet Deferred bien plus intéressant.

Conclusion

Je finis donc sur un échec. En soit ce n'est pas grave, on apprend de ses erreurs, je vais essayer de trouver une documentation plus fournie de io.Socket. Ou un autre plugin de communication client-serveur qui lui fonctionne avec la dernière version de Node.JS. Peut-être trouverais-je mon bonheur dans cette liste de 90 plugins ? Ou chez Joshfire ?

Flattr this!

A propos de Mathieu

Ingénieur développeur web dans la vente par correspondance B2B, adepte de nouvelles technologies et d'innovation. Vous pouvez aussi me retrouver sur Twitter @mathrobin
Cette entrée a été publiée dans NodeJS, avec comme mot(s)-clef(s) , , , , , , , , , , , , , , . Vous pouvez la mettre en favoris avec ce permalien.
  • Pascal

    Tente donc le plugin now.js, ca devrait te simplifier les choses concernant la communication des vars, c’est assez « magique »
    Bon, perso, travailant actuellement sur un projet perso exploitant a fond les websockets, je trouve que nodejs est vraiment pas forcement la meilleure solution…. Voir le serveur tornado cree par facebook, et tornadio qui ajoute la surcouche pour socket.io ….
    Y’a aussi bcp d’autres serveurs websocket en python…

    • http://www.mathieurobin.com/ Mathieu

      Je fais un essai avec Joshfire et après pourquoi pas oui, je testerai tornado. Il y a des chances que si c’est du Facebook ça soit bien plutôt bien foutu. Merci de ton point de vue et de tes conseils en tout cas, ça fait plaisir :)

Articles liés