Java + NodeJS通过套接字进行通信:坏主意?

我喜欢NodeJS的一些function,特别是JQuerification,通过socket.io的websocket兼容性,view和css引擎,我不能使用JSP(当然还有asynchronous调用)。 至less,据我所知。 所以我打算在后端创build我的应用程序将是Java,前端将由NodeJS生成。 前端表单将数据发送到NodeJS,NodeJS将通过NodeJS和Java后端之间的套接字连接将数据传递到Java后端。 所以NodeJS基本上就像前端和Java后端之间的中间件。

这将是一个非常大的应用程序,我的计划看起来令人兴奋,但我会恨我未来的自我沿着这条路线?

我所拥有的优势是可以拥有大量的实时图表和仪表板,并增强与表单的交互。

问题是你谈论一个通用的平台。 Node.JS作为前端,JAVA作为后端。 根据你的实际需要,这可能是惊人的或可怕的。

所以呢? 人们会根据自己是否喜欢成熟的技术(或者其他)来做出回应。

炒作

一个人思考node.js的主要原因是炒作。 像几年前的XML数据库一样。 XML很酷,一切都必须用XML来完成…如果你注意到,没有人再说XML数据库了。

所以node.js是新的,在你附近的博客上谈论它,再加上一个noSQL数据库,它一定是最合适的。

asynchronousIO

然后是像asynchronousIO的理由。 你懂? POSIX标准的东西可能超过20年。 是的,你在C课程的学校学到了什么。 标准的JAVA API也支持它。 事实上,如果你听Node.js的创造者。 这不是新的概念,但只使用asynchronous库。 那里的大多数库使用线程模型,不能用于asynchronous。 Javascript并不是一个目标,但是在JS中没有任何标准库是一个很好的起点,因为它可以避免一般的joe通过包含错误的库来搞乱所有的东西。 这不是我说的那个。

关键是现在有一些图书馆,但有一些是由公司支持的。 我们还不在那里。 而且同时标准专业框架在长时间汇聚HTTP请求时已经支持asynchronous行为。 请参阅提升框架,请参阅NIO的Jetty或Tomcat支持。

像XML数据库一样。 现在像Oracle这样的专业数据库也支持XML。 所以,如果你需要它,你可以保持你的标准高性能数据库…和专门的解决scheme,只能做到这一点……没有人记得,即使是它的名字。

使用Javascript

现在的JavaScript。 Javascript是一个大胆的select…因为缺乏图书馆。 你知道还在做什么 那为什么你需要一个Java后端无论如何! 但不仅如此,IDE对javascript的支持并不好。 自动完成? 勉强工作。 重构? 你在开玩笑吗? Multitheading? 不。 node.js就像windows 3.1。 它使用合作mutlitasking。

结论

Node.js是有趣的,但它是不成熟的。 你自己说过,你必须selectjava,这样你才能像连接数据库那样做真正的事情。 这个堆栈增加了另一层的复杂性。

要么你真的需要它,这也许是一个很好的妥协……要么你不需要它,只要你自己…而且当你看到你花更多的时间去做所有的事情时就会讨厌你,有一个4层堆栈(浏览器,Node.js,JAVA,数据库),而不是3。只是炒作和令人满意的理论。

对我来说,这个计划本身听起来很合理。 但是从我的经验来看,你的团队有足够的力量来承担这一点很重要。 在这种情况下,除非有至less两个好的开发者,一个用于后端部分,另一个用于前端,否则我不会走这条路。 否则,在处理这么多的框架/概念时,很容易迷失方向,而且什么也没有完成。

除此之外,我还要小心使后端和前端之间的通信层易于testing,这将排除套接字连接。 如果你的性能要求允许,我会select一个浏览器可探测的REST风格的界面。 这也可以让后来减less花费的“花哨”的前端,并在JSP或其他任何东西实施的东西。 以防万一它失控

我个人觉得,NodeJs很高兴能够做一些踢脚。 但是现在我不会在生产环境中使用。 特别是如果生产环境会处理关键数据。

我可能会等到,至less到1.0版本。

但是,如果您打算将它用于非关键应用程序,我会说去做。 IT总是很好开始,而且随着应用程序的增长,NodeJS也会成熟。

那么这又是我个人的意见。 我只在我的项目中使用过NodeJS,在任何生产环境中我都从未使用过NodeJs。

如果你要在java中编写一些后端程序,为什么不用java完成呢?

不知道你是什么意思,我喜欢NodeJS的一些function,特别是JQuerification,通过socket.io的websocket兼容性,视图和css引擎,我不能用于JSP(当然还有asynchronous调用)。

jquerification – 你的意思是jquery? 你可以用jsp来做到这一点。

java中的websockets: http : //caucho.com/resin-4.0/examples/websocket-java/index.xtp ,虽然你可能做彗星服务器推送,因为它支持与servlet 3.0

哪个CSS引擎不能用于jsp?

asynchronous调用是什么意思?

对我来说,node.js更多的是关于你是否想要一个非阻塞的服务器。 如果这是要求,你也可以在java中做到这一点 – 大多数现代服务器支持configurationNIO。

你打算雇用开发人员来处理你的项目,还是独奏? 如果您打算扩大开发团队的规模,我发现最大限度地减less产品中的分立技术总数通常有利于团队规模,这大大超过了添加该技术的性能和/或生产力优势。 你所添加的每一项技术都使得聘请专家的难度大大增加,并且当你雇用一个不是所有专家的人的时候,他们的事情就会大大增加,学习。

你真诚地使用node.js的参数似乎很弱; Java没有什么内在的东西让它无法做到“实时的图表和仪表盘,并加强与表单的交互”。 由于它提供的“function”对于实现业务目标来说实际上并不是必不可less的,所以添加一项技术往往是一个错误。 你还提到redis,我会放在同一条船上。 节点和Redis都很酷(可以说,你想添加到你的组合中的技术应该总是会发出警告铃声,顺便说一句),并有合法的用例,但是你所描述的似乎并不是一个。 如果java已经在做你的繁重工作,那么添加一个asynchronous的“中间层”在性能方面不会给你带来太多的收益。

如果您发布有关应用程序特性,预期负载和每个请求所完成的处理工作的更多详细信息,则可能会获得关于最佳体系结构的更多有用的评论。 祝你好运!