在 Express 中实现长连接
如果想要在 Express 中实现长连接,可以考虑使用以下方法之一:
1、使用 WebSocket
WebSocket 是一种在 Web 应用程序中实现实时双向通信的协议。它支持长连接的特性,可以使客户端和服务器在应用程序启动时建立连接,并一直保持连接状态直到应用程序终止。你可以使用 ws 模块来创建 WebSocket 服务器或客户端,然后通过 Express 中间件的形式来将 WebSocket 请求与普通 HTTP 请求一起处理。下面是一个使用 WebSocket 的例子:
const express = require('express');
const app = express();
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', (ws) => {
console.log('WebSocket connected');
ws.on('message', (message) => {
console.log(`Received message: ${message}`);
ws.send(`Server says: ${message}`);
});
ws.on('close', () => {
console.log('WebSocket disconnected');
});
});
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(3000, () => {
console.log('App listening on port 3000');
});
2、使用 SSE
SSE(Server-Sent Events)是一种 HTML5 新增的传输格式,可以在客户端和服务器之间实现长连接。与 WebSocket 不同,SSE 仅支持服务器向客户端的单向通信。你可以使用 sse-stream
模块来创建 SSE 服务,然后通过 Express 中间件的形式来将 SSE 请求与普通 HTTP 请求一起处理。下面是一个使用 SSE 的例子:
const express = require('express');
const app = express();
const sse = require('sse-stream');
app.get('/events', (req, res) => {
const stream = sse(res);
const intervalId = setInterval(() => {
stream.write({ event: 'message', data: 'Hello, world!' });
}, 1000);
req.on('close', () => {
clearInterval(intervalId);
});
});
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(3000, () => {
console.log('App listening on port 3000');
});
以上两种方法都可以用来实现长连接,具体使用哪种方法取决于你的需求。如果你需要实现双向通信,则应该选择 WebSocket;如果你只需要服务器向客户端发送消息,则可以选择 SSE。