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

如何在GCP上部署支持用户连接至同一实例的有状态WebSocket服务器?

在GCP部署WebSocket服务器并确保用户连接至同一实例的方案

核心逻辑

要实现多人同聊天室的广播需求,必须让所有用户的WebSocket连接落地到同一个服务器实例,本质就是避免流量被负载均衡分发到不同节点,同时确保实例有可直接访问的公网端点。

具体实现方案

1. 直接用GCE虚拟机部署(最省心)

  • 创建带静态公网IP的GCE实例,防火墙开对应端口(比如WebSocket常用的80、443或自定义8080)
  • 在实例上启动你的WebSocket服务器,用户直接通过ws://[公网IP]:[端口]或wss://[公网IP]:[端口]连接
  • 这种方式没有分发逻辑,所有用户天然连到同一个实例,完美适配广播场景

2. 借助Cloud Load Balancer固定会话

如果需要保留负载均衡的基础能力(比如后续扩展)但现阶段要单实例:

  • 配置HTTP(S)负载均衡,开启客户端IP会话亲和性,把超时时间设得比你的WebSocket会话预期时长更长
  • 后端实例组只添加单个实例,这样所有流量都会被导向这台实例
  • 注意:WebSocket是长连接,亲和性配置必须生效,否则连接可能被中途分发到其他实例(如果后续加实例的话)

3. Cloud Run单实例模式

如果用Cloud Run托管:

  • 部署时执行命令:gcloud run deploy [服务名] --image=[镜像地址] --max-instances=1 --session-affinity=client_ip
  • 强制Cloud Run只启动一个实例,同时通过会话亲和性确保用户不会被切换到其他实例(虽然这里只有一个)
  • Cloud Run会自动分配公网域名,用户直接用该域名连接即可

关键注意点

  • 防火墙规则:必须创建入站规则,允许所有来源(或指定用户IP段)访问WebSocket端口,比如允许tcp:8080的流量进入
  • SSL证书:如果用加密的wss协议,要么在实例上部署证书,要么用Cloud Load Balancer的托管SSL证书
  • 连接超时:GCP负载均衡默认的长连接超时可能较短,要调整到符合你业务的时长,避免连接被强制断开

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 20:23:26