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

部署在Google Cloud的socket.io服务端无法与客户端维持持久连接问题

问题排查与解决方案

1 端口监听配置修正

你当前硬编码监听8080端口不符合App Engine运行规范,平台会动态分配服务端口,必须优先读取环境变量PORT的值,修改监听代码如下:

const PORT = process.env.PORT || 8080;
server.listen(PORT, () => {
    console.log(`Server is listening on port ${PORT}`);
});

该修改可解决日志中抛出的端口配置告警。

2 Socket.IO 传输协议适配

App Engine标准环境的NGINX代理层默认对HTTP长轮询的超时限制为10秒,刚好对应你遇到的10秒断开重连现象。Socket.IO默认优先走HTTP长轮询再尝试升级WebSocket,会被代理层的超时规则强制断开,需修改服务端Socket.IO初始化配置,强制使用WebSocket传输、调大心跳阈值:

const io = new Server(server, {
  transports: ['websocket'],
  pingTimeout: 60000,
  pingInterval: 25000
});

需同步修改Android客户端的Socket.IO连接配置,同样指定传输方式为websocket,保持两端配置一致。

3 App Engine 扩缩容配置调整

你当前使用的F1实例默认自动扩缩容,闲置实例会被平台主动回收导致连接断开,若服务访问量较低,可调整app.yaml的扩缩容规则降低实例回收概率:

automatic_scaling:
  min_idle_instances: 1
  max_idle_instances: 1
  min_pending_latency: 3000ms
  max_pending_latency: automatic

如果调整后仍频繁出现断开问题,可切换到App Engine灵活环境,该环境对WebSocket长连接的支持更稳定,无标准环境的传输层约束。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:36:03