WebSocket 是一种双向通信协议,允许在客户端和服务器之间建立持久的、实时的连接。在 Node.js 中,使用 WebSocket 可以在各种应用程序中实现双向通信,例如即时消息、多人游戏和股票数据流。本指南将逐步指导你了解 Node.js WebSocket 的开发。
1. 安装必要的模块
首先,需要安装 WebSocket 模块:
npm install ws
2. 创建 WebSocket 服务器
使用 ws
模块创建 WebSocket 服务器:
const WebSocket = require("ws");
const wss = new WebSocket.Server({ port: 8080 });
3. 处理客户端连接
服务器会监听客户端连接事件。当客户端连接时,会触发 connection
事件:
wss.on("connection", function connection(ws) {
console.log("Client connected");
});
4. 发送和接收消息
一旦客户端连接,就可以通过 ws
对象发送和接收消息:
- 发送消息:
ws.send("Hello from server");
- 接收消息:
ws.on("message", function message(data) { console.log(data); });
5. 关闭连接
客户端或服务器可以主动关闭连接:
- 客户端:
ws.close();
- 服务器:
ws.terminate();
6. 自定义事件
除了 connection
和 message
事件外,还可以自定义事件:
ws.on("customEvent", function customEvent(data) { console.log(data); });
7. 实时更新
WebSocket 可用于向客户端发送实时更新,例如股票数据或聊天消息:
setInterval(() => {
wss.clients.forEach((client) => {
if (client.readyState === WebSocket.OPEN) {
client.send(JSON.stringify({ data: "Real-time update" }));
}
});
}, 1000);
8. 异常处理
在 WebSocket 通信中可能会出现异常,需要进行适当的处理:
error
事件:处理服务器错误close
事件:处理客户端或服务器关闭连接时的错误
9. 身份验证和授权
在某些情况下,可能需要对客户端进行身份验证和授权。可以使用第三方中间件或自定义解决方案:
const jwt = require("jsonwebtoken");
wss.use(async (ws, req) => {
try {
const token = req.headers["authorization"];
const decoded = jwt.verify(token, "your_secret_key");
ws.user = decoded;
} catch (err) {
ws.close();
}
});
10. 生产环境注意事项
在生产环境中使用 WebSocket 时,需要考虑以下事项:
- 安全性:使用 HTTPS 协议,防止数据被截获
- 性能:优化服务器代码并使用负载平衡器
- 扩展性:使用集群或云服务来处理大量连接