PM2+Express 实现进程启停教程

在前端开发中,经常会遇到需要开启多个进程来支持高并发访问的情况。如何管理这些进程的启停,是一个很重要的问题。PM2+Express 是一个优秀的进程管理工具和 web 框架,本文将介绍如何使用它们实现进程启停和高并发支持。

什么是 PM2?

PM2 (Process Manager 2)是一个能够帮助你管理 Node.js 应用的进程管理器。它的一些主要特性包括:

  • 简单易用:使用 PM2 可以很方便地启动、停止、重启和监控应用程序。
  • 崩溃自动重启:如果应用程序崩溃了,PM2 可以自动重启该程序。
  • 进程负载均衡:PM2 可以自动使用多个进程来支持高并发。
  • 日志管理:PM2 可以管理应用程序的各种日志,并且可以将它们输出到标准输出流或者特定的日志文件中。

什么是 Express?

Express 是一个灵活而易于上手的 Node.js web 框架。它提供了许多工具和便捷的接口,使得构建和管理 web 应用程序变得更加容易。Express 的主要特点包括:

  • 中间件:Express 使用中间件 (Middleware) 来处理请求和响应。
  • 路由:Express 提供了一种简单的方式来定义路由。
  • 模板引擎:Express 支持多种机制来渲染视图,如 EJS、Pug 等。

使用 PM2 来管理 Express 应用程序

下面我们可以利用 PM2 和 Express 来完成一个实例应用。首先需要创建一个基于 Express 的应用程序,可以使用命令 npm install express --save 来安装 Express。

接着我们可以在 app.js 文件中编写以下代码:

const express = require('express')
const app = express()

app.get('/', function(req, res) {
  res.send('Hello World!')
})

const server = app.listen(3000, function() {
  console.log('Server listening on port 3000')
})

上面的代码是一个简单的 Express 应用程序,这个程序可以监听到 3000 端口,并对 / 的请求返回一个字符串 "Hello World!"。

接下来,我们就需要使用 PM2 来管理这个应用程序。首先,我们需要使用命令 npm install -g pm2 来全局安装 PM2。安装完成后,就可以使用 PM2 来启动我们的应用程序了:

pm2 start app.js --name my-app

上面的命令会使用 PM2 来启动 app.js,并将启动的进程命名为 my-app。启动成功后,我们可以使用如下命令来查看进程:

pm2 list

此时,我们可以在浏览器中访问 http://localhost:3000,结果会显示 "Hello World!"。当我们对进程进行修改时,比如修改了代码并重新保存文件,我们可以使用如下命令来重启进程:

pm2 restart my-app

使用 PM2,我们可以方便地启动、重启和管理多个 Node.js 应用程序。

处理高并发请求

在实际开发中,一个常见的问题是如何处理高并发请求。在 Node.js 中,可以使用 cluster 模块来创建多个进程来处理请求。

不过使用 PM2 可以更加方便地完成这一任务。PM2 可以自动启动多个进程来处理请求,而且还可以在进程崩溃时自动重启这些进程。下面的示例代码展示了如何使用 PM2 来实现高并发请求的支持:

const express = require('express')
const cluster = require('cluster')

const numCPUs = require('os').cpus().length

if (cluster.isMaster) {
  console.log(`Master ${process.pid} is running`)

  // Fork workers
  for (let i = 0; i < numCPUs; i++) {
    cluster.fork()
  }

  cluster.on('exit', (worker, code, signal) => {
    console.log(`worker ${worker.process.pid} died`)
    cluster.fork()
  })
} else {
  // Workers can share any TCP connection
  // In this case it is an HTTP server
  const app = express()

  app.get('/', function(req, res) {
    console.log(`Worker ${process.pid} is running`)
    res.send('Hello World!')
  })

  const server = app.listen(3000, function() {
    console.log(`Worker ${process.pid} started on port 3000`)
  })
}

console.log(`Number of CPUs: ${numCPUs}`)

上面的代码中,我们首先检查当前进程是否是主进程。如果是主进程,我们就调用 cluster.fork() 来创建子进程。每个子进程都会使用 Express 来创建一个 web 服务器,并监听端口 3000

如果某个进程崩溃了,主进程就会自动调用 cluster.fork() 来重新创建一个子进程。

如果当前进程不是主进程,就直接创建一个 Express 应用程序,并在监听到 / 的请求时返回一个字符串 "Hello World!"。

在这个例子中,当并发请求较多时,PM2 会自动创建多个进程来处理这些请求,从而达到处理高并发请求的目的。

总结

本文介绍了如何使用 PM2 和 Express 实现进程启停和高并发请求的处理。通过学习本文,你可以更加方便地管理和部署 Node.js 应用程序。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6593e58beb4cecbf2d8848e3


纠错反馈