Node.js des retours ?

Voila cela fait quelques temps que je vois pas mal de news sur Node.js

Et du coup je me demande si ca peut m’etre utile pour mon boulot.
Sauf que j’ai un peu du mal a cerner le bousin.
Par contre quand je vois cela :
http://sylvainzimmer.com/2011/09/06/chessathome-building-largest-chess-ai/

Ca laisse reveur.

Du coup des gens l’utilisent et peuvent un peu me dire pourquoi comment dans quel but ?
Avantages / inconvenients ?

Merci
Bussiere

C’est un peu le truc qui fait le buzz depuis quelques temps dans le monde du web, mais à mon avis son utilité réelle est confinée à la niche assez restreinte des applications ayant besoin de retours du serveur en temps réel. Par exemple, pour quelque chose de semblable au mur de facebook, qui affiche les statuts des autres utilisateurs sitot qu’ils sont disponibles. ou pour une chatbox. ou suivre le cours de la bourse. ou pour un webgame. bref, quelque chose qui a besoin de données actualisées le plus rapidement possible.
On perdrait tout l’interet de la techno si on l’utilisait pour faire un site classique de remontée de contenu, par exemple, qui sera toujours mieux logé avec un back-end classique en php (ou en java, soyons fou) derrière un cache genre varnish.

Pour info ça parle un peu de node.js dans le HS Linux Magazine sur JavaScript. Du basique mais c’est clair et en français, pour les anglophobes.

Ha merci je vais investir dedans.

il est tres bien en effet :slight_smile:

Hello,
Je rebondis sur ce thread parce que je m’y intéresse également (Bussière, tu as continué ?).
Rabban, la niche dont tu parles est très loin d’être restreinte car on parle de quasiment toute appli web utilisant des appels asynchrones (ajax-style), et pas seulement pour les chats et autres applis de ce genre. Pour ça tu regarderais plutôt du côté des websockets, avec ou sans node.js.

L’histoire c’est qu’avec un serveur http classique ton appel va ouvrir une connexion au serveur et attendre son retour. Pendant tout le temps d’exécution de ta requête, tu vas avoir un thread bloqué.
Avec node.js si j’ai bien compris, ton thread reçoit la requête, la route vers un « handler » puis passe à une autre requête. Lorsque le handler a fini de traiter, il renvoit le résultat via le serveur. Si c’est ça en gros le serveur ne fait plus office que de broker/passe-plats. Ca explique pourquoi on associe tellement node.js à la « scalabilité » (beuark) pour des applications pouvant gérer des milliers de connexions simultannées. Après il faut le reste suive aussi, mais tu élimines un goulot d’étranglement.

Pour l’instant le seul inconvénient que je vois à node.js, c’est que c’est du javascript :stuck_out_tongue:
Après tu as des exemples d’implémentations avec socket.io, avec des sgbd nosql … C’est clairement over-hypé mais qu’est-ce que c’est bon ! :smiley:

J’ai fait mumuse avec notamment avec du svg pour générer des animations.

En gros tu ecris a la volée du svg dans le html en direct avec du jascript et tu changes en direct le svg selon les input / output de l’utilisateur.

<svg width="150" height="150" viewBox="-105 -105 210 210" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <clipPath id="ball"> <circle r="100" stroke-width="0"/> </clipPath> <radialGradient id="shadow1" cx=".4" cy=".3" r=".8"> <stop offset="0" stop-color="white" stop-opacity="1"/> <stop offset=".4" stop-color="white" stop-opacity="1"/> <stop offset=".8" stop-color="#EEEEEE" stop-opacity="1"/> </radialGradient> <radialGradient id="shadow2" cx=".5" cy=".5" r=".5"> <stop offset="0" stop-color="white" stop-opacity="0"/> <stop offset=".8" stop-color="white" stop-opacity="0"/> <stop offset=".99" stop-color="black" stop-opacity=".3"/> <stop offset="1" stop-color="black" stop-opacity="1"/> </radialGradient> <g id="black_stuff" stroke-linejoin="round" clip-path="url(#ball)"> <g fill="black"> <path d="M 6,-32 Q 26,-28 46,-19 Q 57,-35 64,-47 Q 50,-68 37,-76 Q 17,-75 1,-68 Q 4,-51 6,-32"/> <path d="M -26,-2 Q -45,-8 -62,-11 Q -74,5 -76,22 Q -69,40 -50,54 Q -32,47 -17,39 Q -23,15 -26,-2"/> <path d="M -95,22 Q -102,12 -102,-8 V 80 H -85 Q -95,45 -95,22"/> <path d="M 55,24 Q 41,41 24,52 Q 28,65 31,79 Q 55,78 68,67 Q 78,50 80,35 Q 65,28 55,24"/> <path d="M 0,120 L -3,95 Q -25,93 -42,82 Q -50,84 -60,81"/> <path d="M -90,-48 Q -80,-52 -68,-49 Q -52,-71 -35,-77 Q -35,-100 -40,-100 H -100"/> <path d="M 100,-55 L 87,-37 Q 98,-10 97,5 L 100,6"/> </g> <g fill="none"> <path d="M 6,-32 Q -18,-12 -26,-2 M 46,-19 Q 54,5 55,24 M 64,-47 Q 77,-44 87,-37 M 37,-76 Q 39,-90 36,-100 M 1,-68 Q -13,-77 -35,-77 M -62,-11 Q -67,-25 -68,-49 M -76,22 Q -85,24 -95,22 M -50,54 Q -49,70 -42,82 M -17,39 Q 0,48 24,52 M 31,79 Q 20,92 -3,95 M 68,67 L 80,80 M 80,35 Q 90,25 97,5 "/> </g> </g> </defs> <circle r="100" fill="white" stroke="none"/> <circle r="100" fill="url(#shadow1)" stroke="none"/> <g><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0" to="360" begin="0s" dur="3s" repeatCount="indefinite"/> <use xlink:href="#black_stuff" stroke="#EEE" stroke-width="7"/> <use xlink:href="#black_stuff" stroke="#DDD" stroke-width="4"/> <use xlink:href="#black_stuff" stroke="#999" stroke-width="2"/> <use xlink:href="#black_stuff" stroke="black" stroke-width="1"/> </g> <circle r="100" fill="url(#shadow2)" stroke="none"/> </svg>

C’est juste une idée mais j’ai pas le temps de creuser :’(

Bussiere

C’est très bien NodeJS

Ca permet en effet de faire des push en temps reels. Plus besoin d’un setTimer par ex.
Ca permet de stream entre plusieurs clients. X dessine/ecrit/classe/whatever des données sur son interface web. Directement, tu peux rebalancer ce qu’il fait en direct vers d’autres clients sans stocker ni meme intervenir dans les données envoyées (cherchez stream dans la doc).
Ca permet d’avoir le meme language coté client et coté serveur. Plus besoin de transformer/serializé/jsonencodé vos données ni meme vos objets. C’est le meme language. C’est con mais ca permet une grande souplesse de developpement. Passer un un DOM complet se fait en toute simplicité. Imaginez que coté serveur, vous puissez manipulez le DOM client… ah là je vous parle.
Ca permet de faire du full JS simplement, node JS coté serveur, JQuery + MustacheJS coté client. D’ailleurs, je vous invite à regarder le framework JoshFire basé sur ces technos.

NodeJS c’est bien.

Le débat full JS n’est pas celui de ce thread (et ya débat).

Yep des que j’ai le temps je re creuserai ce systeme de générer du svg a la volée en fonction des inputs de l’user.

Bussiere

C’est super tout ça mais :

  • l’histoire du push c’est pas tout à fait exact; le coeur de node.js ne sait pas faire de push, il faut que tu installes socket.io ou équivalent comme tu peux déjà le faire en ruby par exemple
  • passer un DOM complet ? :-/ un peu lourd non ?

C’est l’aspect architecture qui distingue node.js et peut le faire adopter par les entreprises pour de gros projets.
C’est très bien expliqué ici :
http://andrewbrobinson.com/2012/01/27/why-are-event-driven-servers-so-great/
http://nodeguide.com/convincing_the_boss.html

Si ça intéresse encore des gens, j’ai fini par mettre les mains dedans pour faire un jeu d’échecs en ligne. Pas super original, mais je fais ça depuis quelques années avec différentes technos pour pouvoir les comparer :
https://github.com/macmorning/chess-hub
Comments, blames, pull requests et forks bienvenus.
J’ai une version live sur un serveur Heroku, si vous voulez voir ce que ça donne => PM.

J’ai fait un compteur de like fb de instagram et de hastag pour une soirée le but etant de debloquer des animations en fonction du compteur.

Et j’ai aussi voulu installer le rpg todo list.
https://github.com/lefnire/habitrpg

Mes retours marrant a programmer.

Par contre ca bouge super vite dans les versions et tu peux avoir des incompatibilité tres vite dans les versions ou les paquets et ca devient vite le bordel.

J’aimerai que ca se stabilise un peu avant de m’y mettre serieusement.

[quote=“Bussiere, post:12, topic: 52847”][/quote]

Dans la doc NodeJS pour chaque API tu as l’état. Tu sais direct si la fonction est bloquée, stabilisée ou pas. Honnêtement depuis la version 0.8 que je suis l’évolution du projet, j’ai jamais vu de gros breaks sur la version stable. Les mecs gèrent le projet comme des boss !

[quote=« DrDrakeRamore, post:13, topic: 52847 »][/quote]

Je parle pour les paquets aussi par exemple habitrpg dépend de paquets qui ne sont compatibles qu’avec la version 8.0,
ca me rappel un peu perl dans le temps ou c’etait pareil parfois.

Et le coup de batterie non incluse et que tu te retrouves a vouloir installer un truc, puis tu installes des librairies pour le bousin, puis des librairies pour les librairies.
Mais ca c’est une question de gouts personnelles, ce n’est pas un défaut, juste que je trouve ca moche personellement :slight_smile:

[quote=« Bussiere, post:14, topic: 52847 »][/quote]

Oui les dépendances de dépendances n’étaient pas super bien gérées par npm. Mais depuis février 2013 il y a la notion de « peer dependencies » :
http://domenic.me/2013/02/08/peer-dependencies/
Les packages sont mis à jour petit à petit et ça roxx. :slight_smile:

Salut tout le monde.
Je viens juste de finir un premier projet avec nodejs.
Je suis entièrement satisfait du résultat. On peut faire des choses miraculeuses avec le trio nodejs, redis et socket.io.
Je me suis documenté sur « atinux », « naholyr » et il y a aussi un bon tuto fait par mateo21 sur le siteduzero.
Je vous conseil  d’utiliser « nodemon » pour vos tests et  d’installer « ejs » à la place de « jade ». Car « ejs » est plus proche de la syntaxe du php.
Il existe des modules qui ont l’air intéressants comme : « ua » et « passeport » je vais les tester et vous faire des retours.
Bonne aprèm à tous :wink:

Je creuserai a l’occasion, mais ca bouge trop pour moi et c’est un peu trop “gadget” pour que j’ai le temps de m’y interesser.

Dans le sens ou ca fourmille de trucs interessants mais ca part dans tout les sens.

Par contre l’implementation sur mobile ca donne quoi ?

Pour faire du serveur bas niveau scalable et réactif je conseillerais Go qui est maintenant assez mature, plutôt que node.js ; moins de bibliothèques, mais un langage conçu exactement pour cette utilisation.

Perso la seule implémentation que je connais qui utilise node.js c’est Grunt (que j’utilise pour intégrer JQuery). Il y a quoi comme gros projets qui utilisent node.js en exploitation ?

[quote=« Bussiere, post:17, topic: 52847 »][/quote]

Pour les vesrions mob, j’ai installé le module ‹ user-agent › ça tourne. Il me retourne déjà le bon user-aget.

Pour faire un simple test :

// Pour afficher le navigateur client
app.get('/ua', function(req, res){
    res.send('user ' + req.headers['user-agent']);
});

J’ai pas fini, il faut que je trouve une bonne expression regulière coté serveur, qui renvoi les agents-mob vers la bonne route.

Je te tiendrai au courant :wink:

[quote=« Histrion, post:18, topic: 52847 »][/quote]

je fais pas mal de golang et j’ai fait mumuse avec le dernier boost en puissance l’a rendu encore plus attractif a mes yeux :slight_smile: