Node.js对Java开发者而言是什么?
我们都知道Node.js现在得到了所有的关注。每个人都对学习Node.js感兴趣,并希望可以工作于Node.js。在开始工作之前了解技术背后的概念总是不会错的。但对初学者来说,可能会因为不同的人使用的不同定义而晕头转向。Node.js究竟是什么?它是新的语言还是新的框架,是新的工具抑或只是一个简单的JavaScript文件?即使对于有经验的Java开发人员来说,也很难快速了解Node.js。因此,在本文中,我将尝试为Java开发人员诠释Node.js。
运行时环境
我们知道Java需要一个称为JRE的运行时环境来运行Java程序。JRE有一个称为Java Virtual Machine(JVM)的虚拟机。JVM有许多组件,如垃圾回收器(GC),即时(JIT)编译器,解释器,类装载器,线程管理器,异常处理器,用于在不同时间执行不同的任务。
除了JVM之外,JRE还有一系列的库(例如,rt.jar)来帮助运行时的Java程序。我们有单独的JRE用于不同的平台,如Windows,Macintosh和Linux,以及还有JVM。
好吧,就试着记住如何编译和执行一个Java程序。我们有源代码(.java),它由Java编译器编译成一个名为Bytecode(.class)的中间代码。此Bytecode被提供给JVM以便在给定的目标平台上执行。JVM在执行之前将Bytecode转换为特定于目标平台的机器码。
Java程序的执行可以通过下面的图片解释:
Web应用程序架构
典型的Java Web应用程序架构有四个层:客户层(Client),展示层(Presentation),服务/业务层(Service/Business)和数据层(Data)。
客户层(Client layer)可以使用像jQuery这样的库来支持AJAX功能并且具有一些客户端验证和DOM操作。
展示层(Presentation layer)通常是与客户层交互的一个层。该层通常已经实现了用于请求和响应处理的MVC模式。在这一层可以使用如Spring MVC这样的框架。此外,还有一个模板引擎,如Velocity,可以根据预定义的布局动态地渲染视图。
服务或业务层(Service/Business layer)负责具备业务逻辑并与其他层通信。在AJAX请求的情况下,该层直接向客户层提供数据。此层执行业务逻辑并回应到展示层以更新模型。服务层是与数据层通信以获取或更新所需数据的一个层。服务层可以具有使用任何框架,例如Spring的SOAP或REST服务实现。
数据层(Data layer)通常使用一些ORM框架,如Hiberate,或任何基于JDBC的库/模板(Spring JDBC模板)来与任意RDBMS(如Oracle)进行通信。
架构部署
Java Web应用程序架构部署包括Apache HTTP服务器,它充当代理服务器以及提供静态内容。动态内容由Web容器提供,Web容器实际上是处理Java文件的引擎。
下图说明了Java Web应用程序的架构部署:
我如何理解Node.js?
运行时环境
我们上面讨论JRE的原因是为了直接与Node.js进行比较。对,你看明白了吧! Node.js不是一种语言;不是框架;也不是工具。它是用于运行基于JavaScript应用程序的运行时环境。
与JRE类似,Node.js有一个称为JavaScript Virtual Machine(JsVM?)的虚拟机。它为基于JavaScript的应用程序生成机器代码,以便在不同的平台上启用它。
Node.js还有一系列库,它们可能被称为Node API或Node Modules,用于帮助在运行时运行JavaScript应用程序,类似于JRE中的Java库。我们对不同的平台,如Windows,Macintosh和Linux,以及JsVM有不同的Node.js要求。
JavaScript Virtual Machine就是V8,来自Google的开源JavaScript引擎。与Java Virtual Machine一样,JsVM(V8引擎)也有主要组件,如JIT和GC,分别用于执行任务,运行时编译,和内存管理。
现在,让我们试试理解JavaScript程序是如何编译和执行的。源代码是用JavaScript(.js)编写的。在将其提供给JsVM(V8引擎)之前,没有生成中间代码。JsVM直接获取此源代码并将其编译为特定于给定目标平台的机器代码以便执行。
下面的图片可以简明地说明上述解释:
Web应用程序架构
基于Node.js的Web应用程序主要遵循Java Web应用程序架构。主要区别在于客户端请求处理。客户端请求将由单个线程处理,但在Node.js应用程序的情况下将异步处理。使用Java,每个客户端请求将由单独的线程同步处理,因此它是多线程的。
有许多框架/库可用于基于Node.js的Web应用程序开发。这里有趣的地方在于,所有的框架/库都是基于JavaScript的。
你可以从下面的图片中快速理解不同的层和在那些Node.js应用程序层中使用的框架/库。
客户层使用Angular.js,客户端MVC框架。展示层,以及服务层,可以通过使用Express.js,一个基于JavaScript的Web应用程序框架来开发。这也自带一个用于运行Node.js应用程序的独立服务器。数据层使用对象数据建模模块(例如Mongoose.js)来与NoSQL数据库(如MongoDB)通信。
这个特殊的栈称为MEAN,它由MongoDB,Express.js,Angular.js,客户端MVC框架和Node.js(运行时环境)组成。
架构部署
基于Node.js的Web应用程序的架构部署遵循Java的Web应用程序部署架构。它有一个NGINX服务器,它的作用就如同HTTP代理服务器,并提供静态内容。动态内容由Node.js服务器提供,该服务器包含处理JavaScript文件的引擎。
下面的图解释了基于Node.js的Web应用程序的架构部署:
就这样?
请注意,这篇文章的目的只是为了帮助从Java开发人员的角度理解Node.js,而不是为了显摆对Java或Node.js的支持。此外,除了我们在讨论中涉及到的之外,还有许多不同的架构解决方案、框架和工具。为了便于比较和理解,我采用了最简单和可行的架构解决方案以及最简单的框架和库系列。因此,请务必更进一步地去深入了解。祝大家学习愉快!
来源:51CTO

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Forrester:AI 科技与商业严重脱节,系统优化才是企业 AI 应用之道
新兴的科技受到追捧是社会进步的体现,然而商业对新兴科技的吸收需要一个不断磨合的过程。人工智能让人们看到了其巨大的潜力,但应该如何体现其商业价值,如果使其落地于各个商业场景,如果让开发人员有效地衔接,都成为了企业决策者需要思考的问题。新智元就 AI 在企业中的应用问题采访了弗雷斯特研究公司首席分析师(企业架构方向)戴鲲先生。弗雷斯特研究公司(Forrester Research)是全球最大的第三方市场研究机构之一,主要为企业和公众提供商业科技和市场战略方面的洞见和咨询。 “在我们的企业客户中,有越来越多的人在关注AI科技可能对企业带来的改变”,戴先生告诉新智元记者。据弗雷斯特 2016 年的一份报告显示,在其在全球范围内在线调查的391个商业和科技决策者中,有58%的人表示正在研究企业应如何应用人工智能(包括市场、方案、平台、提供商、
- 下一篇
如何设计基于Hadoop、Spark、Storm的大数据风控架构?
量化派是一家金融大数据公司,为金融机构提供数据服务和技术支持,也通过旗下产品“信用钱包”帮助个人用户展示经济财务等状况,撮合金融机构为用户提供最优质的贷款服务。金融的本质是风险和流动性,但是目前中国对于个人方面的征信行业发展落后于欧美国家,个人消费金融的需求没有得到很好的满足。按照央行最新数据,目前央行征信中心的数据覆盖人口达到8亿人[1],但其中有实际征信记录的只有3亿人左右,有5亿人在征信系统中只是一个身份证号码。此外,我国还有5亿人跟银行从来没有信贷交易关系,这5亿人对金融部门来说是陌生人。这样算下来,有征信记录的人只占到全国人口数的23.7%,远低于美国征信体系对人口的85%的覆盖率。如何在信用记录缺失的情况下,做好多个人用户的风险定价,是个棘手的难题。量化派通过基于机器学习和互联网化的风险定价,整合互联网及传统数据源,对个人在消费金融应用场景里的信用风险进行评估。这篇文章就主要介绍一下量化派的大数据平台,以及机器学习在量化派的应用。 一、互联网化的风控创新 量化派及“信用钱包”的核心任务是让用户可以凭借其良好的信用,而无需抵押或者担保就可以贷款。也就是说,用户仅凭信用即可开启...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8编译安装MySQL8.0.19
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Linux系统CentOS6、CentOS7手动修改IP地址
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- MySQL8.0.19开启GTID主从同步CentOS8
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题