手机版

Node.js简单介绍前传

时间:2021-09-03 来源:互联网 编辑:宝哥软件园 浏览:

1.什么是节点

简单来说,Node.js就是运行在服务器上的JavaScript。

Node.js是一个基于Chrome JavaScript运行时的平台。

Node.js是基于谷歌V8引擎(谷歌Chrome浏览器使用的JavaScript执行环境)的事件驱动I/O服务器JavaScript环境。

V8引擎执行Javascript非常快,性能非常好。

2.为什么选择NodeJS

如果你是一个前端程序员,不知道PHP、Python、Ruby等动态编程语言,然后想自己创建服务,那么Node.js是一个非常好的选择。

Node.js是运行在服务器上的Javascript。如果你熟悉JavaScript,你会很容易学会Node.js。

当然,如果你是后端程序员,想部署一些高性能的服务,学习Node.js也是一个非常不错的选择。

3.3的特点。NodeJS

我们先来看看NodeJS官网上的介绍:

Node.js是一个基于Chrome的JavaScript运行时构建的平台,用于轻松构建快速、可扩展的网络应用程序。Node.js使用事件驱动、非阻塞的I/O模型,使其轻量级且高效,非常适合跨分布式设备运行的数据密集型实时应用程序。

其特征在于:

1.这是一个运行Javascript的环境

2.依靠Chrome V8引擎进行代码解释

3.事件驱动

4.非阻塞输入输出

5.轻量级且可扩展,适合实时数据交互应用

6.单进程,单线程

异步事件驱动模型

我们还想发起一个请求,等待服务器响应;但与银行的例子不同,这次我们点了晚餐后得到了一个号码。

当我们得到这个号码时,我们倾向于在这个位置等待,而我们后面的请求将继续被处理。同样,当我们拿着一个号码在一旁等待时,接待员可以继续处理。

当食物编号后,我们会拨打号码,我们会得到自己的食物进行后续加工(食用)

呼叫号码的动作在NodeJS中称为Callback,在事件(烹饪、I/O)处理完毕后可以继续执行以下逻辑(吃饭)。

这体现了NodeJS的显著特点,异步机制和事件驱动

整个过程不阻断新用户的连接(点餐),也不需要维护已经点餐的用户和厨师之间的连接

节点。Js使用事件驱动模型。当web服务器收到请求时,它会关闭请求,然后处理它,然后服务下一个web请求。当请求完成时,它被放回处理队列,当它到达队列的开头时,结果被返回给用户。这种模型非常高效且可扩展,因为webserver总是接受请求,而无需等待任何读写操作。(这也称为非阻塞IO或事件驱动IO)

基于这种机制,理论上用户已经相继请求连接,NodeJS可以响应,所以NodeJS可以支持比Java和PHP程序更高的并发性

虽然维护事件队列也需要成本,但由于NodeJS是单线程,事件队列越长,响应时间越长,并发性仍然不足

总结NodeJS如何解决并发连接的问题:

连接到服务器的方式发生了变化,每个连接都会发出一个运行在NodeJS引擎进程中的event,这个Event会被放入事件队列中。

而不是为每个连接生成一个新的操作系统线程(并为其分配一些匹配的内存)

输入输出阻塞

NodeJS解决的另一个问题是I/O阻塞。看看这个业务场景:数据需要从多个数据源中提取,然后进行处理

(1)串行数据采集是我们的通用解决方案,以PHP为例

如果需要1 s来获得简介,1S来获得时间线,那么需要2S来获得系列

(2)节点无阻塞输入输出,传输/监控事件控制执行过程

NodeJS遇到I/O事件时会创建一个线程执行,然后主线程会继续执行。

因此,当采取配置文件的动作触发输入/输出事件时,采取时间线的动作将立即执行。

两个动作并行执行。如果每个动作需要1S,则总时间为1S

在他们的输入/输出操作被执行之后,他们传输一个事件、概要文件和时间线。

事件代理收到后,继续执行以下逻辑,这是NodeJS非阻塞I/O的特点。

总而言之:

Java和PHP也有实现并行请求(子线程)的方法,但是NodeJS自然会通过Callback函数和异步机制来实现

4.Nodejs的优缺点

优点:

1.高并发性(最重要的优势)

2.适合输入/输出密集型应用

缺点:

1.不适合CPU密集型应用;CPU密集型应用给Node带来的主要挑战是:由于JavaScript单线程,如果有长时间运行的计算(比如大循环),CPU时间片不会释放,导致后续I/O无法启动;

解决方案:将大的操作任务分解成几个小的任务,这样可以及时释放操作,而不阻塞I/O调用的发起;

2.只支持单核CPU,无法充分利用CPU

3.可靠性低。一旦代码的某个环节崩溃,整个系统就会崩溃

原因:单一进程,单一线程

解决方案:(1)Nnigx反向代理,负载均衡,开放多个进程,绑定多个端口;

(2)打开多个进程监控同一个端口,使用集群模块;

4.开源组件库质量参差不齐,更新快,向后不兼容

5.调试不方便,没有错误的堆栈跟踪

摘要

以上是边肖介绍的Node.js的简单前传,希望对大家有所帮助。如果你有任何问题,请给我留言,边肖会及时回复你。非常感谢您对我们网站的支持!

版权声明:Node.js简单介绍前传是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。