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 :

Questions avant le lancement d'un projet


Sujet :

NodeJS

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 38
    Points : 33
    Points
    33
    Par défaut Questions avant le lancement d'un projet
    Bonjour,
    Je suis actuellement un développeur spécialisé en j2ee, avec utilisation de spring et hibernate.

    Histoire de rester dans la course et suivre les évolutions du marché et des nouveaux langages, j'aimerais me mettre peut être au node.js mais j'ai quelques impératifs et question avant de ma lancer.

    1°) J'ai lut que node.js était simple Threading, comment il gère un site avec beaucoup d'appel concurrent ?
    L'exemple d'un site de vente en ligne serait parfait pour illustrer ce point, avec une centaine d'utilisateur sur les listes de catalogue, et 5 ou 6 utilisateurs en cours de finalisation de commandes.
    En Java, chaque appel a son propre thread, la seul limite est la mémoire alloué a tomcat.
    J'aimerais savoir comment est géré cette situation en node.js , pour eviter que les utilisateurs attendent un traitement pour avoir leur page affiché.

    2°)Il m'arrive en JAVA de thread quelques fonctionnalités pour que mon servlet rende la main à l'utilisateur plus rapidement. Exemple génération d'un email contenant un PDF + envoie de celui-ci ( cela peut prendre 1 seconde, et je veut pas que l'utilisateur attendent une action dont il n'y a pas de retour écran, hors une redirection)
    J'aimerais savoir comment node.js gère ce genre de situation ?

    3°)Peut on créer en node.js des variables statiques qui restent active tant que le serveur web tourne et donc le partager entre les différentes connexions ?

    4°)Node.js propose t'il de bon ORM comme hibernate par exemple ?
    Avec une bonne gestion des transactions.
    De préférence qui supporte des bases de données SQL et Mysql.

    5°)Node.js propose t'il de bon Framework MVC avec injection (comme spring) ?

    6°)Il y a divers outils que me sont constamment demandé dans les applications que je fait et j'aimerais savoir si il y a déja des lib de faite pour cela ?
    -Génération de PDF ( de préférence a partir d'un code HTML5)
    -Génération et lecture de fichier xls et xlsx
    -Génération de code barre EAN13, EAN128 et QRcode.
    -Utilisation de socket entre divers machines.
    -Envoie et lecture d'email.



    Merci d'avance a ceux qui auront la gentillesse de me répondre.

  2. #2
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Étant tombé dans node.js depuis peu je vais peut être rater des choses dans l'explication mais j'ai quelques éléments de réponses :

    1°) J'ai lut que node.js était simple Threading, comment il gère un site avec beaucoup d'appel concurrent ?
    L'exemple d'un site de vente en ligne serait parfait pour illustrer ce point, avec une centaine d'utilisateur sur les listes de catalogue, et 5 ou 6 utilisateurs en cours de finalisation de commandes.
    En Java, chaque appel a son propre thread, la seul limite est la mémoire alloué a tomcat.
    Un serveur node n'a qu'un seul thread servant d'interface avec le moteur d'exécution javascript (V8 le moteur de Google si ma mémoire est bonne). Cela signifie que toutes les requêtes des clients occupent ce thread. C'est ce qu'ils appellent la Event Loop.

    En revanche les opérations effectuées par ce thread sont asynchrones et déléguées à d'autres threads sur lesquels le développeur n'a pas la main (sauce interne de V8). Par exemple si tu as 3 clients qui requêtent en concurrence pour lire des fichiers par exemple, chaque requête sera traitée par le même thread dans lequel s'exécute le programme javascript que tu auras développé, mais les I/O sur les fichiers seront déléguées à V8, ainsi toutes tes requêtes seront en fait traitées en même temps par node. Dans ton code appelant la lecture tu auras un callback de succès qui sera exécuté lorsque la lecture sera terminée (ou au fur et à mesure si tu utilises les streams).

    C'est en fait le même principe que l'event loop des browsers, laquelle attend une intéraction de l'utilisateur, l'exécution d'un timeout (setTimeout()), ou une réponse sur une requête http émise. Ce n'est pas parce que tu fais un call http que ton browser est freezé en attendant la fin du téléchargement de la réponse. Ben c'est pareil sur node.

    J'aimerais savoir comment est géré cette situation en node.js , pour eviter que les utilisateurs attendent un traitement pour avoir leur page affiché.
    Généralement les serveurs node servent à écrire des endpoints REST, lesquels sont consommés par des Single Page Application (AngularJS, Angular, React, Vuejs, etc ...). Donc du point de vue du client la page html n'est pas restituée par le serveur, le serveur ne retourne que du json et le client fait sa vie.

    2°)Il m'arrive en JAVA de thread quelques fonctionnalités pour que mon servlet rende la main à l'utilisateur plus rapidement. Exemple génération d'un email contenant un PDF + envoie de celui-ci ( cela peut prendre 1 seconde, et je veut pas que l'utilisateur attendent une action dont il n'y a pas de retour écran, hors une redirection)
    J'aimerais savoir comment node.js gère ce genre de situation ?
    A mon avis la meilleure solution est de déléguer ce genre d'opérations longue à un autre serveur node dont le rôle sera de créer des pdf lequel transmettra à un autre serveur node dont le rôle sera d'envoyer un mail. La requête initiale pourra donc être relâchée dès le call au service créant le pdf.

    Ceci dit, c'est pareil en Java, c'est plus une question d'architecture, tu fais le choix de confier ça à un autre thread mais tu aurais pu tout aussi bien le confier à un micro service.

    3°)Peut on créer en node.js des variables statiques qui restent active tant que le serveur web tourne et donc le partager entre les différentes connexions ?
    Oui mais partager un state entre les clients au niveau de ton serveur d'application est une mauvaise pratique, cela t'empêche de scaler ton système si tes variables ne sont pas readonly ET identiques sur toutes tes instances.

    Donc là aussi j'ai envie de dire que ce n'est pas une question propre à node mais une question d'architecture.

    4°)Node.js propose t'il de bon ORM comme hibernate par exemple ?
    Avec une bonne gestion des transactions.
    De préférence qui supporte des bases de données SQL et Mysql.
    Oui depuis quelques années l'écosystème c'est considérablement enrichi. J'avais jeté un oeil il y a genre 4 ou 5 ans et c'était chaud yavait rien, aujourd'hui il y a tout ce qu'il te faut.

    Sequelize par exemple. Mais il y en a d'autres.

    Node.js propose t'il de bon Framework MVC avec injection (comme spring) ?
    Alors ça

    Le truc c'est qu'en javascript côté serveur il est fortement conseillé de penser functionnal programming et pas OOP. Du coup c'est pas vraiment la même manière de fonctionner. Là aussi je découvre doucement et je prends une sacré claque. Tout un monde merveilleux qui était caché et qui se révèle doucement.

    Je te conseille de te pencher sur cette chaine Youtube pour découvrir la programmation fonctionnelle : Fun Fun Function. C'est une tuerie !

    6°)Il y a divers outils que me sont constamment demandé dans les applications que je fait et j'aimerais savoir si il y a déja des lib de faite pour cela ?
    Pour les sockets c'est certain que oui, les mails probablement, pour le reste je ne sais pas mais node commence à réellement s'implanter durablement dans les SI orientés web. Du coup ya de grandes chances.



    Tu as je pense raison de t'intéresser au javascript côté serveur, c'est je pense le futur du web. Il suffit de regarder les recrutements effectués par les startups pour se rendre compte de la tête qu'auront les SI des entreprises de demain, la demande sur node.js est assez impressionante. On est encore limité aux startups mais de l'autre côté de l'Atlantique node.js s'est imposé dans pas mal d'entreprises ayant pignon sur rue (je pense à Paypal et divers médias qui sont sous node). En France les grosses entreprises sur node sont rares, j'ai travaillé récemment avec un dev qui a fait une mission chez TF1 sur le SI web et ils utilisent hapi.js. Bref, se sont les entreprises qui ont de gros SI ouverts sur le web qui ont tout intérêt à faire du node.js c'est objectivement beaucoup plus efficace pour ce besoin que J2EE.
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 38
    Points : 33
    Points
    33
    Par défaut
    Merci pour les réponses.
    Je me permet de poser une petite question subsidiaire :
    Comment on peut mettre plusieurs sites en node.js sur le même serveur ?
    Car je vois que chaque site en lui même dépend de la création d'un service http et donc réserve un port, je vois aussi du coup que l'on doit attribuer a chaque site un port different, ce qui force a l'utilisation en amont d'un proxy.
    J'ai vu qu'il en existait un ultra sommaire en node.js, mais j'ai l'impression que l'utilisation d'un apache ou d'un squid est la solution à ce soucis.
    Je me trompe ou est ce qu'il y a un autre moyen de faire sans bloquer 10 ports différents ?


    Je vais sans doutes prendre d'ici la fin de l'année 3 ou 4 jours d'autoformation sur node.js au frais de mon patron.

    Je suis aussi en train de voir quel est l'interet d'un framework MVC javascript coté client comme angular, ayant déja dev des milliards de fonctionnalités et api en jquery , je n'y vois pas beaucoup d'interet pour le moment.

    Et je regarde aussi un peu du coté de python, qui a l'air d'avoir la côte actuellement.

  4. #4
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Citation Envoyé par Allensan Voir le message
    Merci pour les réponses.
    Je me permet de poser une petite question subsidiaire :
    Comment on peut mettre plusieurs sites en node.js sur le même serveur ?
    Car je vois que chaque site en lui même dépend de la création d'un service http et donc réserve un port, je vois aussi du coup que l'on doit attribuer a chaque site un port different, ce qui force a l'utilisation en amont d'un proxy.
    J'ai vu qu'il en existait un ultra sommaire en node.js, mais j'ai l'impression que l'utilisation d'un apache ou d'un squid est la solution à ce soucis.
    Je me trompe ou est ce qu'il y a un autre moyen de faire sans bloquer 10 ports différents ?
    Je ne sais pas ce que tu appelles un site, pour moi un serveur node.js sert à exposer des services REST, pas nécessairement des pages web ya déjà moults webserver qui feront ça bien mieux.

    De ma compréhension, node.js ne sert pas à faire des sites web mais des applications web. La nuance est de taille. C'est un substitut à J2EE, pas au PHP.

    Et d'autres part, l'architecture endpoints REST agnostiques du client d'un côté et SPA javascript de l'autre est l'état de l'art actuel pour réaliser des applications web.

    Citation Envoyé par Allensan Voir le message
    Je suis aussi en train de voir quel est l'interet d'un framework MVC javascript coté client comme angular, ayant déja dev des milliards de fonctionnalités et api en jquery , je n'y vois pas beaucoup d'interet pour le moment.
    Ça dépend par rapport à quoi mais les SPA sont bien plus rapides que des applications web avec templating côté serveur. Et ça scale. Et ça permet de déporter du calcul chez les clients au lieu de le faire côté serveur pour tout le monde.

    Maintenant si tu faisais déjà des SPA avec jQuery la réponse est simple : Productivité. A ceci près que tu auras le cout d'entrée à payer mais ça vaut clairement le coup. Après je ne sais pas si Angular est le bon choix. J'ai fait beaucoup de AngularJS ces dernières années, je passe doucement à Angular et je suis pas hyper convaincu. Vue.js me semble pas mal du tout. React/Redux vaut également le détour pour les nouveaux concepts qu'il amène. Mais là aussi ya des couts d'entrée importants.
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  5. #5
    Membre chevronné

    Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Février 2004
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Février 2004
    Messages : 758
    Points : 2 084
    Points
    2 084
    Par défaut
    Je vous conseille fortement VUEJS. J'ai créé une application vuejs en single page, associé avec un serveur nodejs pour avoir un proxy en web services, avec du cache, pour d'autres plateformes web, et ca marche juste du feu de Dieu.

    Et pourtant de base je débutais complètement en tout: javascript, nodejs, vuejs.

    VueJS est vraiment très puissant et efficace, j'aime beaucoup sa simplicité de mise en place quand on connait le HTML, sa taille très légère, sa vélocité, son orientation composants, et ses capacités d'encapsulation de codes JS existants.

Discussions similaires

  1. Question avant le commencement d'un projet
    Par TheYoungGeek43 dans le forum C#
    Réponses: 1
    Dernier message: 26/02/2017, 12h15
  2. questions avant projet + crypter un fichier ?
    Par Lorenzo77 dans le forum Delphi
    Réponses: 2
    Dernier message: 01/07/2006, 13h45
  3. [Débutant] Lancement d'un projet Open Source
    Par itanea dans le forum Général Java
    Réponses: 12
    Dernier message: 28/05/2006, 21h54
  4. Dernière question avant installation
    Par Iceman6259 dans le forum Mandriva / Mageia
    Réponses: 8
    Dernier message: 25/05/2005, 18h57
  5. [Plugin]Lancement d'un projet JSP sous Eclipse avec Tomcat
    Par samios dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 25/08/2004, 18h03

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