Node.js并发运行HTTP与WebSocket服务器,实现POST请求数据转发
我来帮你把这个HTTP+WebSocket联动的服务器给完善好!你现在的代码已经迈出了第一步,接下来咱们把WebSocket的部分补全,让整个数据流转的流程顺畅跑起来。
需求梳理
咱们要实现的核心功能其实很清晰:
- 搭建一个HTTP服务器,专门接收指定机器发来的POST请求
- 从POST请求里提取完整的消息体数据
- 把这些数据通过WebSocket实时转发给另一个客户端
完整实现代码
首先得先安装Node.js的WebSocket库ws,在项目目录里跑这个命令:
npm install ws
然后是完整的服务器代码:
const http = require('http'); const WebSocket = require('ws'); // 创建HTTP服务器 const server = http.createServer((request, response) => { // 处理POST请求 if (request.method === 'POST') { let msgBody = ''; // 接收POST数据(注意:大请求会分片,所以要累加) request.on('data', (chunk) => { msgBody += chunk; }); // 数据接收完成后处理 request.on('end', () => { console.log('收到POST数据:', msgBody); // 把数据发送给所有WebSocket客户端 wss.clients.forEach((client) => { if (client.readyState === WebSocket.OPEN) { client.send(msgBody); } }); // 给POST请求返回响应 response.writeHead(200, {'Content-Type': 'text/plain'}); response.end('数据已转发'); }); } else { // 非POST请求返回404 response.writeHead(404); response.end(); } }); // 创建WebSocket服务器,和HTTP服务器共享端口 const wss = new WebSocket.Server({ server }); // 维护WebSocket客户端连接 wss.on('connection', (ws) => { console.log('有WebSocket客户端连接'); // 处理客户端断开 ws.on('close', () => { console.log('WebSocket客户端断开连接'); }); // 处理WebSocket错误 ws.on('error', (error) => { console.error('WebSocket错误:', error); }); }); // 启动服务器,监听3000端口 server.listen(3000, () => { console.log('服务器已启动,监听端口3000'); });
关键细节说明
- POST数据接收:千万别直接把
data事件的chunk赋值给msgBody,因为如果POST的数据比较大,Node.js会把数据拆成多个分片发送,所以必须用累加的方式拼接完整数据,等end事件触发后再处理。 - WebSocket客户端管理:我们通过
wss.clients来遍历所有连接的客户端,发送前要检查客户端的连接状态是OPEN,避免发送到已经断开的连接。 - 响应POST请求:处理完数据后一定要给POST请求返回响应,不然发送POST的客户端会一直等待超时。
- 数据格式:如果你的POST数据是JSON格式,可以在
end事件里用JSON.parse(msgBody)解析,但要记得加try-catch捕获解析错误,避免服务器崩溃。
内容的提问来源于stack exchange,提问作者Questionnaire
相关产品推荐
相关产品推荐

