Skip to content

网络编程

Node.js 在网络编程方面表现出色,特别是在构建高性能的服务器方面。本节将重点介绍 https 模块和 WebSocket 的使用。

https 模块

https 模块是 Node.js 中用于创建安全的 HTTP 服务器和客户端的模块。它与 http 模块非常相似,但增加了对 TLS/SSL 的支持,从而实现了加密通信。

创建 HTTPS 服务器

要创建一个 HTTPS 服务器,你需要一个 SSL 证书(包括私钥和公钥)。

javascript
const https = require('https');
const fs = require('fs');

const options = {
  key: fs.readFileSync('key.pem'), // 私钥
  cert: fs.readFileSync('cert.pem') // 公钥
};

const server = https.createServer(options, (req, res) => {
  res.writeHead(200);
  res.end('Hello, secure world!\n');
});

server.listen(8000, () => {
  console.log('HTTPS server running on port 8000');
});

WebSocket

WebSocket 提供了一个在客户端和服务器之间进行双向实时通信的协议 。与传统的 HTTP 请求-响应模型不同,WebSocket 允许服务器主动向客户端推送数据。

在 Node.js 中使用 WebSocket

虽然 Node.js v22 提供了内置的 WebSocket 客户端 ,但要创建 WebSocket 服务器,通常需要依赖第三方库,例如 ws

示例:使用 ws 库创建 WebSocket 服务器

首先,安装 ws 库:

bash
npm install ws

然后,创建一个 WebSocket 服务器并将其附加到现有的 HTTPS 服务器上

javascript
const https = require('https');
const fs = require('fs');
const WebSocket = require('ws');

const options = {
  key: fs.readFileSync('key.pem'),
  cert: fs.readFileSync('cert.pem')
};

const server = https.createServer(options);

const wss = new WebSocket.Server({ server });

wss.on('connection', (ws) => {
  console.log('Client connected');

  ws.on('message', (message) => {
    console.log(`Received: ${message}`);
    // 将收到的消息广播给所有客户端
    wss.clients.forEach((client) => {
      if (client !== ws && client.readyState === WebSocket.OPEN) {
        client.send(message);
      }
    });
  });

  ws.on('close', () => {
    console.log('Client disconnected');
  });
});

server.listen(8000, () => {
  console.log('HTTPS and WebSocket server running on port 8000');
});

这个例子展示了如何创建一个安全的 WebSocket 服务器,它能够接收来自客户端的消息,并将其广播给所有其他连接的客户端,从而实现实时通信。