IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

NodeJS Discussion :

Node.js, cet inconnu (pour moi)


Sujet :

NodeJS

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 209
    Par défaut Node.js, cet inconnu (pour moi)
    Bonjour à tous,

    Je viens vers vous après avoir cherché pas mal de temps.

    J'essai de me mettre à node, plus pour le plaisir que par necessité puisque je ne suis pas un professionnel du web.

    Mais certains aime jouer aux jeux vidéo, moi c'est fabriquer des applications PHP et JS principalement.

    J'essai donc de me mettre à node, et j'ai le plus grand mal à comprendre la documentation. Je m'explique, avec comme exemple socket.io, qui n'est pas node, mais qui illustre ma problèmatique avec l'ensemble des modules...

    Voici une partie d'un tutoriel pour un chat QUI FONCTIONNE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    io.sockets.on('connection', function (socket) 
    {
      socket.on('user message', function (msg) 
      {
        socket.broadcast.emit('user message', socket.nickname, msg);
      });
    });
    Et j'ai beau chercher dans la doc, nul part je ne vois d'ou sort 'user message'... Et j'ai ce probleme de facon reccurente avec express, node, et j'en passe.

    Bref, je ne comprend pas ou aller chercher l'information...

    Suis je clair ?

    Bien cordiamement

  2. #2
    Expert éminent

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Par défaut
    Bonjour,

    Pourriez-vous nous dire d'où vient le tutoriel ? C'est vrai que comme ça, on ne sait pas d'où sort quoi.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Tout d’abord, bienvenue dans le monde du Node.js

    Pour une description rapide, Node.js est une technologie assez récente dont le but est de fournir des outils permettant de créer des applications réseaux asynchrone de manière rapide et simple.

    Ta question est vaste et je vais donc essayer d’y répondre au mieux en ciblant ta question sur socket.io. Je ne connais pas ton niveau dans le développement web, donc je vais prendre le temps d'expliquer à quoi sert socket.io.

    A l'origine, le web ne permet que des échanges "unidirectionnels". Le client émet des requêtes HTTP au serveur qui y répond. Mais le serveur ne peux pas contacter le client de son propre chef. De plus en plus, on a eu besoin de mises à jour des informations au niveau du client.
    Prenons le cas d'un chat par exemple. Lorsque l'un des participants envoie un message, le serveur ne peux pas le renvoyer aux autres. Donc chaque client doit en boucle demander au serveur "Tu as des nouveaux messages pour moi ?". Ceci est souvent fait en Ajax.
    Le problème de ces requêtes répétitives c'est qu'elles consomment de la bande passante et sont parfois inutiles puisqu'il n'y a pas forcément de nouveaux messages.
    Ce besoin d'informations en temps réel est de plus en plus présent sur le net et pour palier à ça, HTML5 introduit les websockets. Ces derniers permettent de créer une connexion TCP bidirectionnelle entre le client et le serveur. Le serveur peut donc ainsi émettre des messages à destination du client.

    Socket.io est une implémentation des websockets pour node.js (en réalité c'est plus que ça car il supporte le cas ou les websockets ne sont pas disponibles grâce à des astuces dont je ne parlerai pas ici).

    Socket io a deux méthodes principales :
    • socket.on(signal, callback) permet d'associer une fonction à la réception d'un signal : lorsque le signal est émis, le callback est exécuté.
    • socket.emit(signal, paramètres) permet d'émettre un signal avec des paramètres qui peuvent être utiles aux récepteurs du signal et qui seront passés aux callback qui ont étés associés au signal.


    Dans ce code, 'user message' est dont un signal (qui n'a pas besoin d'être déclaré, c'est une simple chaine de caractères).

    Côté client, quand tu envoies un message dans le chat, le signal 'user message' va être émis avec en paramètre le message que tu as envoyé.
    Côté serveur, le signal 'user message' est associé à une fonction qui renvoyer le message à toutes les personnes connectées au chat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    io.sockets.on('connection', function (socket) // lors de la connection d'un utilisateur, j'associe la socket à l'utilisateur, et je vais faire ça : 
    {
      socket.on('user message', function (msg) // lorsque je reçois un signal 'user message', c'est que l'utilisateur vient d'envoyer un message sur le chat
      {
        socket.broadcast.emit('user message', socket.nickname, msg); // je renvoie ce message en "broadcast" (à tous les utilisateurs connectés) et j'ajoute le nickname associé au client pour que les autres sachent d'où vient le message
      });
    });
    Je ne suis pas sur de bien répondre à ta question, mais à ma décharge, elle est plutôt vaste et je n'ai pas le temps de faire un article complet. Si tu as besoin d'aide sur des sujets spécifiques (l'asynchronisme, les callbacks, les websockets...), n'hésite pas à revenir vers nous

    PS : voici un livre traduit par un membre de cette communauté pour t'initier au Node.js
    http://nodejs.developpez.com/tutorie...ebutant/#LIV-B
    Dernière modification par Invité ; 22/01/2013 à 15h37.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 209
    Par défaut
    Tout d'abord merci à vous 2 pour vos participation.

    >Vermine : C'est un tutoriel issue de github : https://github.com/hij1nx/node-chat

    >Enerian : J'ai de bonne base en PHP, sans pour autant etre un expert et je me débrouille à peu pres en JS pour une utilisation classique sur une page web classique (ca veux tout et rien dire mais bon, j'essai de situer tout de meme ). Mais je découvre au fur et à mesure l'intéret de ce language, qui j'ai l'impression à de belle heure devant lui... Au contraire de PHP peut etre... Mais ce n'est pas la ma question.

    Donc merci pour ces explication, mais dans notre exemple, 'user message' n'est pas une simple chaine de caractere, c'est un mot apparament reservé, puisque si je change toutes les instance 'user message' par 'mon message', dans tous les scripts composants le chat en exemple (c'est assez rapide qu'on ce rassure) le chat ne fonctionne plus...

    Ce qui à cree mon désarroi...

    De même, dans express (et issue de la doc de express) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    app.configure('development', function(){
      app.set('db uri', 'localhost/dev');
    })
    D'ou sort il 'development' ???

    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    app.enable('trust proxy');
    Ou dans la doc pouvons nous savoir que ces options existe???
    J'ai pris les premiers exemples qui me venais sous la main, mais j'avoue que je me trouve souvent dans cette situation.

    Malgré tout il y a du positif, puisque je commence à comprendre la doc en ligne sur nodejs.org/api/

    Je crois que mes lacunes en connaissance fine des connexions reseaux me joue des tours...

  5. #5
    Invité
    Invité(e)
    Par défaut
    Salut,

    Il faut bien comprendre que malgré leur succès rapide, Node.js et les modules associés sont très jeunes.
    Franchement, je trouve que Node.js est très bien pensé. NPM et ses modules sont un avantage énorme. L'outil a rapidement été utilisable, même en entreprise. Mais ça reste une technologie jeune et changeante.
    Je trouve que pour cette ancienneté, les documentations de Node.js et de la plupart de ses modules les plus utilisés sont franchement bien faites, même si un peu légères par endroit. Effectivement, tout n'est pas documenté, mais l'expérience va t'apporter des solutions.

    Par exemple, même sans avoir beaucoup utilisé express, je peux te dire à quoi correspond ce code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    app.configure('development', function(){
      app.set('db uri', 'localhost/dev');
    });
    Souvent, lorsque tu développes une logiciel, tu vas avoir plusieurs environnements dans lequel il va vivre :
    • L'environnement de production : là où l'application va tourner au final
    • L'environnement de test (/recette) : là où l'application va être testée
    • L'environnement de développement : là où l'application est développée

    En réalité, tu peux en avoir plus (notamment la pré-prod), mais ce sont les principaux. Or, les environnements ne sont pas forcément configurés de la même manière : tu n'auras pas par exemple forcément la même adresse de connexion à la base de données en prod et en dev. Du coup, tu vas devoir configurer ton application en fonction de l'environnement sur lequel elle tourne.
    Ce code configure les paramètres relatifs à l'environnement de développement.

    Pour ce qui est de l'option "true proxy", il est vrai que je n'ai pas vu la liste des options exploitées par express dans la doc (je n'y ai pas non plus passé des heures). Par contre, j'ai remarqué en regardant le code source du framework que app.enable et app.disable font en fait appel à app.set(clé, valeur booléenne). Cela te permet de stocker des options de configuration dans ton application. Tu peux même définir les tiennes. Il est probable qu'à un moment donnée dans le framework, il regarde si "true proxy" est défini et agisse en conséquence. Ces options exploitées par le framework même ne sont en effet pas référencées (ou je n'ai pas vu où).
    Mais tu utilises ces généralement options si tu as besoin de quelque chose en particulier. Et dans ce cas, d'autres se sont surement posés la question avant toi et tu verras des solutions en surfant sur le net (ici, stackoverflow.com...). Si jamais tu souhaites un comportement du framework dont personne ne parle et qui n'est pas référencé dans la doc :
    1. Regarde dans le code si la fonctionnalité existe
    2. Si non, interroge toi sur un moyen de faire autrement avec les outils proposés
    3. Si pas possible, développe la fonctionnalité et soumet la aux auteurs du framework


    Je pense sincèrement que Node.js est très bien conçu, dispose d'une communauté très active et répond de manière appropriée à un besoin de plus en plus présent : le temps réel (de part son asynchronisme, et de part son choix du langage JS qui se prête particulièrement à ça, à mon gout). Par contre, elle est jeune et s'y attaquer implique d'essuyer parfois des plâtres. Je trouve personnellement que ça rend notre job encore plus passionnant
    Dernière modification par Invité ; 24/01/2013 à 14h38.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 209
    Par défaut
    Merci Enerian pour le temps que tu prends pour me repondre.

    Et oui, je crois aussi que je vais devoir "essuyer des platres"

    Mais la technologie proposé m'interesse alors je vais continuer à chercher.

    Pour info, ya t il une communauté avec un forum specialisé node, ou quelques chose comme cela? Perso je n'ai pas vraiment trouvé dans mes (nombreuses) recherche (hormis un googleGroup)...

    Bien cordialement

Discussions similaires

  1. Erreur inconnu sans solution claire pour moi actuellement
    Par geforce dans le forum Développement Web en Java
    Réponses: 2
    Dernier message: 27/12/2012, 17h19
  2. aidez moi dans cet exercice pour un exposer
    Par yassin123441 dans le forum C++
    Réponses: 15
    Dernier message: 09/03/2007, 17h24
  3. erreur sql inconnu (pour moi)
    Par kimcharlene dans le forum Requêtes
    Réponses: 5
    Dernier message: 04/12/2006, 20h22
  4. Réponses: 1
    Dernier message: 02/02/2005, 19h34
  5. [casse-tete (pour moi)] recuperer la largeur d'un <div>
    Par Invité dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 05/11/2004, 07h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo