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

Google Cloud Run如何使用WebSockets协议?非Socket.io方案咨询

在Google Cloud Run上实现原生WebSockets通信(Node.js)

Google Cloud Run本身支持原生WebSockets,你遇到的问题大概率是配置或代码实现上的疏漏,以下是具体的实现步骤和注意事项:

1. 开启Cloud Run服务的会话亲和性

WebSocket需要持续绑定到同一个实例,否则负载均衡会把后续请求分发到其他实例导致连接中断:

  • 控制台操作:进入Cloud Run服务的设置页面,找到「会话亲和性」选项,设置为「开启」。
  • 命令行操作:
gcloud run services update [你的服务名称] --session-affinity

2. Node.js后端的原生WebSocket实现

推荐使用ws库快速实现,步骤如下:
首先安装依赖:

npm install ws

编写服务端代码(示例文件名server.js):

const http = require('http');
const WebSocket = require('ws');

// 创建HTTP服务器(Cloud Run要求WebSocket必须基于HTTP服务封装)
const server = http.createServer((req, res) => {
  res.writeHead(200);
  res.end('Native WebSocket server running on Cloud Run');
});

// 挂载WebSocket服务
const wss = new WebSocket.Server({ server });

// 处理客户端连接
wss.on('connection', (ws) => {
  console.log('New client connected');

  // 接收客户端消息并回复
  ws.on('message', (data) => {
    console.log(`Received message: ${data}`);
    ws.send(`Server echo: ${data}`);
  });

  // 处理断开连接事件
  ws.on('close', () => {
    console.log('Client disconnected');
  });
});

// 监听Cloud Run指定的端口(必须使用PORT环境变量,不能硬编码)
const PORT = process.env.PORT || 8080;
server.listen(PORT, () => {
  console.log(`Server listening on port ${PORT}`);
});

3. 配置Dockerfile

确保Dockerfile能正确打包服务,示例:

FROM node:18-alpine
WORKDIR /app

# 复制依赖文件并安装生产环境依赖
COPY package*.json ./
RUN npm install --production

# 复制应用代码
COPY . .

# 启动服务
CMD ["node", "server.js"]

4. 部署与测试

  • 部署到Cloud Run:使用常规部署命令即可,比如gcloud run deploy [服务名称] --source .
  • 前端测试:在浏览器控制台执行以下代码验证连接:
const ws = new WebSocket('wss://[你的Cloud Run服务域名]');

ws.onopen = () => {
  console.log('Connected to server');
  ws.send('Hello from client!');
};

ws.onmessage = (event) => {
  console.log('Received from server:', event.data);
};

ws.onclose = () => {
  console.log('Disconnected from server');
};

常见问题排查

  • 连接失败优先检查会话亲和性是否开启,这是最常见的触发原因。
  • 必须使用PORT环境变量指定的端口,不能硬编码固定端口。
  • Cloud Run实例会自动扩缩容,当实例被销毁时WebSocket连接会断开,建议前端实现重连逻辑。

内容的提问来源于stack exchange,提问作者Kritsada Suriyakul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 17:06:49