You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:44:28