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

部署多人协作白板项目至Vercel时遇Socket.io后端问题求助

解决Vercel部署Socket.io协作白板的后端报错问题

Vercel是Serverless平台,默认的Express+Socket.io部署方式不兼容,核心问题是普通Serverless函数不支持WebSocket长连接,同时部署结构不符合Vercel要求。以下是针对性修复步骤:

1. 调整后端部署结构

将后端代码移至项目根目录的api/文件夹下,命名为socket.js(Vercel会自动识别该目录下的文件为Serverless函数)。

2. 修改后端代码适配Vercel

替换原后端代码为以下内容,移除app.listen(Vercel会自动处理端口和启动),改用HTTP Server包装Express实例并导出:

const express = require("express");
const { Server } = require("socket.io");
const http = require("http");

const app = express();
const server = http.createServer(app);

const io = new Server(server, {
  cors: {
    origin: "*",
    methods: ["GET", "POST"]
  }
});

io.on("connection", (socket) => {
  console.log("Made socket connection");
  socket.on("beginpath", (data) => {
    io.sockets.emit("beginpath", data);
  });
  socket.on("drawstroke", (data) => {
    io.sockets.emit("drawstroke", data);
  });
  socket.on("performUndoRedo", (data) => {
    io.sockets.emit("performUndoRedo", data);
  });
});

// 导出Vercel兼容的HTTP handler
module.exports = server;

3. 修正前端Socket连接路径

前端不再直接连接域名,改为连接Vercel的API路由:

<script>
  let socket = io.connect("/api/socket");
</script>

4. 配置Vercel支持WebSocket

在项目根目录创建vercel.json文件,添加WebSocket支持配置:

{
  "functions": {
    "api/socket.js": {
      "runtime": "@vercel/node@20",
      "maxDuration": 60,
      "websocket": true
    }
  },
  "routes": [
    { "src": "/(.*)", "dest": "/public/$1" }
  ]
}

5. 调整前端静态文件托管

将原frontend文件夹下的所有前端文件移至public目录(Vercel会自动托管该目录的静态资源,无需用Express的static中间件),删除后端代码中的app.use(express.static("./frontend"))行。

额外注意事项

  • Vercel免费层的WebSocket连接最长维持60秒,若需要更长连接需升级至付费方案,或在前端添加自动重连逻辑;
  • 部署前确保所有依赖已添加至package.json,并在Vercel部署时选择正确的Node.js版本(建议18+)。

内容的提问来源于stack exchange,提问作者Charan Reddy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 00:26:30