Java + NodeJS la communication par socket: Mauvaise Idée?
J'aime certaines fonctionnalités de NodeJS, en particulier JQuerification, websocket compatibilité via socket.io, la vue et le css moteurs que je ne peux pas utiliser avec les JSP (et bien sûr, des appels asynchrones). Au moins, autant que je sache. Donc j'ai l'intention de créer mon application où le backend sera de Java, de la fin de devant sera généré par NodeJS. L'extrémité avant les formulaires d'envoyer des données à NodeJS qui va le transmettre à la Java backend via les connexions socket entre NodeJS et la Java backend. Donc, NodeJS agit fondamentalement comme un middleware entre le frontal et la Java backend.
Ce sera une assez grande application, et mon plan s'annonce passionnant, mais je déteste mon futur moi pour descendre cette route?
L'avantage que j'ai c'est que je peux avoir beaucoup de temps réel, des graphiques et des tableaux de bord, et d'améliorer les interactions avec les formes.
- La seule raison de ne pas le faire dans le backend node.js est parce que vous avez déjà une interface en java. Si vous ne le faites pas, faire la chose entière dans node.js
- les deux backends serveur à des fins différentes. Nœud permet pour certaines fonctionnalités que nous pourrions utiliser, alors que Java fournit de solides données de connectivité. Faire la chose entière dans le Nœud serait gênant que le Nœud n'est pas entièrement en charge des Sgbdr. Aussi, nous pourrions utiliser le redis pour la base de données en mémoire cache. Googler est une phrase stupide, mais bon, il communique parfaitement sa raison d'être!
- Si votre écriture d'un nouveau backend qui ne marche pas communiquer à des bases de données existantes, vous devriez jeter un oeil à mongo & couch. C'est le noSQL vs SQL argument que je ne vais pas la peine d'aller dans.
- Nous ne pouvons pas utiliser une base de données noSQL comme principale source de données, nous allons avoir besoin des fonctionnalités qui n'existent pas dans les bases de données noSQL, heck, nous ne peuvent même pas utiliser MySQL. Mais nous allons utiliser une base de données noSQL comme un cache couche. Nous allons donc utiliser les deux.
- Je ne le pense pas, je suis d'accord avec gAMBOOKa, il n'y a aucun point en utilisant quelque chose qui est immature, et franchement, Java a résisté à l'épreuve du temps, et bien nodejs est solide, c'est le module de l'écosystème n'est pas aussi mature que le Java. Pourquoi réinventer la roue en Nodejs quand c'est bien fait pour vous en Java.
Vous devez vous connecter pour publier un commentaire.
Problème, c'est que vous parlez d'une plate-forme générique. Node.JS l'extrémité avant, JAVA backend. En fonction de vos besoins réels, cela peut être merveilleux ou terrible.
Alors? Les gens vont réagir avec leur remplissage en fonction, s'ils le préfèrent les technologies matures ou pas (ou peu importe).
Hype
La principale raison d'une personne à penser à node.js est hype. Comme XML de la base de données il y a quelques années. XML a été cool et tout devait être fait avec XML... si vous remarquez, personne ne parle plus sur les bases de données XML.
Donc node.js est nouvelle, le blog près de chez vous en parler, et couplé avec une base de données NoSQL, il doit être un ajustement parfait.
Async IO
Puis vient les justifications comme async IO. Vous savez? La chose qui est dans la norme POSIX peut-être depuis plus de 20 ans. Oui, ce que vous avez appris à l'école dans votre C sûr. Par ailleurs, la norme API JAVA prend en charge aussi. En fait, si vous écoutez node.js créateur, ce n'est pas le concept qui est nouveau, mais en utilisant seulement async bibliothèques. La plupart des bibliothèques de l'utilisation d'un modèle de thread et ne peut pas être utilisé pour async. Javascript n'était pas un but en soi, mais en l'absence de toute norme bibliothèque JS est un bon point de départ car elle permettrait d'éviter que la moyenne joe gâcher tout en incluant le mauvais bibliothèque. Ce n'est pas moi qui a dit que l'.
Le point est, il ya maintenant un certain nombre de bibliothèques, mais un peu tout de soutenu par une entreprise. Nous en sommes pas encore là. Et dans le même temps, le standard cadre professionnel déjà soutien async comportement en cas de besoin tout au long de l'interrogation de la requête HTTP. Voir le Lever du cadre, voir Jetty ou Tomcat soutien à NIO.
Comme la base de données XML. Maintenant, professionnel de bases de données comme Oracle ne supporte XML. Ainsi dans le cas où vous en avez besoin, vous pouvez garder votre standard de haute performance de la base de données... Et la solution spécialisée qui ne peut faire que... eh Bien personne ne s'en souvient même son nom.
Javascript
Maintenant pour le javascript. Javascript est un choix audacieux... Pour son manque de bibliothèques. Vous savez ce qui manque encore. C'est pourquoi vous avez besoin d'un java backend de toute façon! Mais pas seulement... IDE de prise en charge de javascript n'est pas bon. L'auto-complétion? Peine de travail. Refactoring? Vous plaisantez? Le Multithreading? Nope. node.js c'est comme windows 3.1. Il utilise le multitâche coopératif.
Conclusion
Node.js c'est amusant, mais il est immature. Vous l'avez dit vous-même, vous avez à choisir java, de sorte que vous pouvez faire les choses sérieuses telles que la connexion à la base de données. Cette pile ajoute à la complexité d'une autre couche.
Soit vous en avez vraiment besoin et c'est peut-être un bon compromis... soit vous n'en avez pas besoin et vous venez de vous s'il vous plaît... et la haine de vous-même plus tard, quand vous voyez que vous passez plus de temps pour tout faire... juste pour dire que vous avez un 4 la pile de calque (navigateur, Node.js, JAVA, DB) au lieu de 3. Juste pour le battage et le plaisir de la théorie.
Pour moi, le plan semble raisonnable en soi. Mais de mon expérience, il est important que votre équipe est assez forte pour le supporter. Dans ce cas, je ne voudrais pas aller dans cette voie, sauf si il y a au moins deux bonne devs, un pour la partie back-end et l'autre pour le front-end. Sinon, c'est juste trop facile de se perdre lorsque l'on traite avec autant de cadres et de concepts, et que rien n'est fini.
D'ailleurs que je prendrais soin de faire la couche de communication entre back et front-end facilement testable, ce qui exclurait les connexions socket. Si vos exigences de performances le permettent, j'avais opter pour un navigateur d'exploration RESTE de style de l'interface. Cela permettrait également de rendre possible la chute de la "fantaisie" front-end avec moins d'effort plus tard sur, et de mettre en œuvre quelque chose de JSP ou quoi que ce soit. Juste au cas où il sort de la main...
Personnellement, je pense que NodeJs est agréable de faire quelques coups de pied autour de avec. Cependant, je ne mettrais pas utiliser dans un environnement de production à partir de maintenant. Surtout si l'environnement de production serait de la manipulation de données critiques.
Je serais probablement attendre jusqu'à ce que, il en arrive à la version 1.0 au moins.
Mais si vous prévoyez sur l'utilisant pour des applications critiques, je dirais d'aller pour elle. IL est toujours bon de commencer, et je suppose que votre application se développe NodeJS va mûrir en tant que bien.
Là encore ce n'est que mon opinion personnelle. J'ai seulement utilisé NodeJS dans mes projets, je n'ai jamais utilisé de NodeJs dans tout environnement de production.
Si vous allez à une fin de retour en java, pourquoi ne pas tout faire en java?
Pas sûr de ce que tu veux dire par "j'aime certaines fonctionnalités de NodeJS, en particulier JQuerification, websocket compatibilité via socket.io, la vue et le css moteurs que je ne peux pas utiliser avec les JSP (et bien sûr, des appels asynchrones)."
jquerification - vous dire jquery? vous pouvez le faire avec jsp.
websockets en java: http://caucho.com/resin-4.0/examples/websocket-java/index.xtp, bien que vous pourriez aussi bien le faire comète server push comme compatibles avec servlet 3.0
css moteur ne peut pas être utilisé avec jsp?
qu'entendez-vous par des appels asynchrones?
pour moi, node.js est plus sur si vous voulez un non-blocage du serveur. si c'est l'exigence, vous pouvez le faire en java trop - plus moderne serveur en charge la configuration de NIO.
Allez-vous embaucher des développeurs pour travailler sur votre projet, ou est-il en solo? Si vous prévoyez jamais mise à l'échelle d'une équipe de développement, j'ai trouvé que pour réduire au minimum le nombre total de discrètes technologies dans votre produit a généralement des prestations en équipe-mise à l'échelle de massivement l'emportent sur les performances et/ou la productivité des avantages de l'ajout de cette technologie. Chaque technologie vous ajoutez le fait que beaucoup plus difficile d'embaucher quelqu'un qui est un expert dans tous les d'eux, et augmente considérablement les chances que lorsque vous embauchez quelqu'un qui n'est pas un expert dans tous les d'eux, ils vis de quelque chose, parce qu'ils ont beaucoup à apprendre.
Vos arguments pour l'utilisation de node.js honnêtement semblent assez faible; il n'y a rien d'intrinsèque à propos de Java qui le rend incapable de le faire "en temps réel des graphiques et des tableaux de bord, et d'améliorer les interactions avec les formes." Ajout d'une technologie pour le mélange, car il offre des "fonctionnalités" qui ne sont pas indispensables pour atteindre les objectifs de votre entreprise est souvent une erreur. Vous avez également mentionné le redis, que je mettrais dans le même bateau. Les deux nœud et redis sont cool (être capable de dire que sur une technologie que vous souhaitez ajouter à votre mélange doit toujours le son des cloches d'avertissements, d'ailleurs) et ont des cas d'utilisation, mais ce que vous décrivez ne semble pas en être un. Si java est déjà en train de le votre de levage lourd, l'ajout d'un asynchrone "niveau intermédiaire" n'allez pas acheter vous bien en termes de performances.
Si vous publiez plus de détails sur les caractéristiques de votre application, la charge prévue, et la transformation du travail qui est fait par demande, vous obtiendrez probablement plus de commentaires utiles sur la meilleure architecture. Bonne chance à vous!
Je pense que nodejs est idéal pour les premiers de la couche où nous travaillons sur IO manipulation des emplois.
La deuxième couche pourrait être un courtier comme rabbitmq. La dernière couche est une logique d'entreprise qui est mise en œuvre en Java. Donc, je suggère de jeter un coup d'oeil à
mon approche qui est une sorte de hub qui a parlé de l'architecture:
https://github.com/farshad-nsh/nodejs-rabbitmq-Java
En utilisant cette approche, vous pouvez apprécier nodejs et le monde java simultanément et d'utiliser le meilleur des deux mondes dans un logiciel distribué.