📜  Node.js 网络应用架构

📅  最后修改于: 2022-05-13 01:56:11.874000             🧑  作者: Mango

Node.js 网络应用架构

Node.js 是一个基于 JavaScript 的平台,主要用于创建 I/O 密集型 Web 应用程序,例如聊天应用程序、多媒体流站点等。它基于 Google Chrome 的 V8 JavaScript 引擎构建。 Web 应用程序是在服务器上运行并由客户端浏览器呈现的软件,该客户端浏览器通过 Internet 访问应用程序的所有资源。

一个典型的 Web 应用程序由以下组件组成:

  • 客户端:客户端是指通过发送请求与服务器交互的用户。
  • 服务器:服务器负责接收客户端请求,执行适当的任务,并将结果返回给客户端。它充当前端和存储数据之间的桥梁,允许客户端对数据执行操作。
  • 数据库:数据库是存储 Web 应用程序数据的地方。根据客户的请求,可以创建、修改和删除数据。

Node.js 服务器架构:为了管理多个并发客户端,Node.js 采用了“单线程事件循环”设计。 Node.js 处理模型中采用了基于 JavaScript 事件的模型和 JavaScript 回调机制。它采用了两个基本概念:

  1. 异步模型
  2. I/O 操作的非阻塞

这些特性增强了 Node.js Web 应用程序的可扩展性、性能和吞吐量。

Node.js 架构的组件:

  • 请求:根据用户需要执行的操作,对服务器的请求可以是阻塞的(复杂的)或非阻塞的(简单的)。
  • Node.js 服务器: Node.js 服务器接受用户请求,处理它们,并将结果返回给用户。
  • 事件队列:事件队列的主要用途是存储传入的客户端请求,并按顺序将它们传递给事件循环。
  • 线程池: Node.js 服务器中的线程池包含可用于执行处理请求所需的操作的线程。
  • 事件循环:事件循环接收来自事件队列的请求并将响应发送给客户端。
  • 外部资源:为了处理阻塞的客户端请求,使用了外部资源。它们可以是任何类型(计算、存储等)。

Nodejs 服务器的工作流程:

  • 用户向服务器发送请求(阻塞或非阻塞)以执行操作。
  • 请求首先在服务器端进入事件队列。
  • 事件队列按顺序将请求传递给事件循环。事件循环检查请求的性质(阻塞或非阻塞)。
  • 事件循环处理不需要外部资源的非阻塞请求,并将响应返回给相应的客户端
  • 对于阻塞请求,将单个线程分配给进程以使用外部资源完成任务。
  • 操作完成后,请求被重定向到事件循环,事件循环将响应返回给客户端。

优点:

  • Node.js 服务器可以通过使用事件队列和线程池来有效地处理大量请求。
  • 无需建立多个线程,因为 Event Loop 一次处理所有请求,因此单个线程就足够了。
  • 向 Node.js 服务器提供请求的整个过程消耗更少的内存和服务器资源,因为一次处理一个请求。