宝哥软件园

Node.js的特点及应用场景介绍

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

Node.js应该是当今最热门的技术之一。本文主要介绍了Node.js的特点和应用场景

Node.js是一个基于Chrome JavaScript运行时的平台,用于构建快速、易扩展的网络应用。在事件驱动的帮助下,无阻塞I/O模型变得轻量高效,非常适合运行在分布式设备上的数据密集型实时应用。

1特点

1.1异步输入/输出

异步输入输出相对于同步输入输出.许多I/O操作,如读写文件、输入输出、请求响应等,都必须在程序执行过程中进行。一般来说,输入输出操作非常耗时。例如,在传统的编程模式下,您必须读取几千兆字节的文件,整个线程被挂起,等待文件读取后继续执行。换句话说,I/O操作阻塞了代码的执行,大大降低了程序的效率。

异步I/O对于前端工程师来说并不陌生,因为发起Ajax请求是最常见的“异步”调用。在Node中,以读取文件(读取文件是一个耗时的I/O操作)为例,与发起Ajax请求的方式非常相似:复制代码如下: var fs=require(' fs ');FS.readfile ('/path ',函数(err,file) {console.log('读取文件完成');});Console.log('开始读取文件');

上述代码调用fs.readFile后,后续代码立即执行,“读取文件完成”的时间是不可预测的。当一个线程遇到I/O操作时,它不会以阻塞的方式等待I/O操作结束,而只会将I/O请求发送给操作系统,并继续执行后续语句。操作系统完成I/O操作后,会以事件的形式通知执行I/O操作的线程,线程会在特定的时间处理这个事件。

1.2事件循环和回调函数

所谓的事件循环是指Node将通过使用事件机制来解决所有的异步操作,一个线程在循环中不断地检查事件队列。事件循环检查事件队列中未处理的事件,直到程序结束。事件的编程方法具有轻量级、松散耦合、只关注事务点的优点。然而,在多个异步任务的场景中,事件是相互独立的,如何协作是一个问题。在Javascript中,回调函数无处不在,回调函数是接受异步调用返回的数据的最佳方式。

1.3单线程

Node将JS作为一个单独的线程保存在浏览器中。单线程最大的优点是不需要像多线程编程那样关心状态同步,没有死锁,也没有线程上下文切换的开销。单线程也有其弱点,主要表现在三个方面:无法使用多核CPU;错误会导致整个应用退出,应用的健壮性值得研究;大量的计算会占用CPU,这使得异步I/O的调用成为不可能。

针对上述问题,Node采用了与HTML5 Web Workers相同的思路,使用child_process解决了单线程计算量大的问题。通过将计算分配给子进程,可以分解大量的计算,然后通过进程间的事件消息传递结果。

1.4跨平台

节点是跨平台的,即同一组JS代码可以在Windows、Linux、OSX等平台上部署运行。这主要是由于Node在操作系统和Node上层模块系统之间搭建了平台层架构libuv。

2.应用场景

1)、实时应用:如在线聊天、实时通知推送等。(如socket.io)2)、分布式应用:通过高效并行I/O利用现有数据3)、工具应用:海量工具、小到前端压缩部署(如grunt)、大到桌面图形界面应用4)、游戏应用:游戏领域对实时性和并发性要求较高(如网易的pomelo框架)5)、利用稳定的接口提升Web渲染能力6)、前端编程语言环境统一:前端开发人员可以快速切入服务器端开发(如著名的纯Javascript全栈MEAN架构)

更多资讯
游戏推荐
更多+