# Node.js解决了什么问题

Node.js的首要目标是提供一种简单的、用于创建高性能服务器及可在该服务器中运行的各种应用程序的开发工具。首先让我们来看一下现在的服务器端语言中存在着什么问题。在Java、PHP或ASP.NET等服务器端语言中,为每一个客户端连接创建一个新的线程,而每个线程需要耗费大约2MB的内存,也就是说,理论上,具有8GB内存的服务器可以同时连接的最大用户数为4000个左右。要让Web应用程序支持更多的用户,就需要增加服务器的数量,而Web应用程序的硬件成本也就随之增加了。不仅如此,在技术层面也会因此产生一些潜在的问题。例如,由于同一个用户的不同客户端请求可能会被不同的服务器处理,因此必须在所有的服务器之间共享所有的资源。由此可见,在一个Web应用程序中,一个主要的瓶颈是服务器所支持的最大同时连接用户量。

Node.js修改了客户端到服务器端的连接方法,解决了这个问题。因为它并不为每个客户端连接创建一个新的线程,而是为每个客户端连接触发一个在Node.js内部进行处理的事件。因此,如果使用Node.js,可以同时处理多达几万个用户的客户端连接。因此,当需要使Web应用程序能够支持大量用户的并发连接的时候,我们应该考虑使用Node.js。

# 实现高性能服务器

Node.js是运行在服务器上的javascript。由V8javascript引擎所解析并执行的脚本语言,是Google公司使用C++开发的一种高性能js引擎。

# 非阻塞型I/O及事件环机制

# 什么叫非阻塞型I/O

javascript是一种只支持单线程的语言。因此不用担心死锁问题。 例如当访问数据库获取数据时,在未返回结果时,可以继续执行后续的代码,把数据库返回的结果放在回调函数里面处理,而不用等待数据库返回数据,从而提高了程序的执行效率。

# 事件环机制

在一个时刻只能执行一个事件回调函数,但是在执行一个事件回调函数时可以转而处理其他事件,然后返回继续执行原事件回调函数,这种处理机制称为事件环机制。

# Node.js适合场景

需要大量并发的I/O应用。

  • 聊天服务器 在一个具有很高人气的聊天应用程序中,在同一时刻通常可能存在着大量用户与聊天服务器之间的并发连接,而服务器端本身并不存在非常复杂的处理。

  • 综合服务类网站或者电商网站的服务。

在这类网站的服务器端,往往可能在每秒钟内接收到多达上千条数据并且需要将这些数据书写到数据库中,Node.js是解决这类问题的关键。Node.js将通过其队列机制将这些数据迅速书写在缓存区中,然后再通过每一个单独的处理从缓存区中取出这些数据并将其书写到数据库中。如果使用其他服务器(如Apache服务器或Tomcat服务器)的话,由于这些服务器采用的均为阻塞型I/O机制,因此需要为每条数据(到数据库中)的写入等待一段时间。如果使用Node.js服务器,由于其采用的是非阻塞型I/O机制,因此可以同时实现这些数据到数据库中的写入,而不必再为每条数据的写入等待

# Node.js中模块

Node.js官方网站

  • Node.js中是通过以模块为单位来划分所有功能的。
  • 通过exports导出模块功能。
exports.testMod = function(){ return "testMod" }
  • 使用require引入模块
var testMod = require('./testMod.js')
  • Node.js核心模块图
Last Updated: 3/16/2020, 12:11:08 AM