如何解决GCP上的WebSocket连接错误(错误码1006)
WebSocket错误码1006断开连接排查方案(Spring Boot 3.x + Java 17 + GCP环境)
针对生产环境遇到的WebSocket错误码1006断开问题,在排除防火墙限制的前提下,可从以下方向逐一排查:
补全心跳机制
GCP环境下的负载均衡、中间件常会因连接长时间无数据传输触发空闲断开。给Spring Boot WebSocket配置心跳,维持连接活跃:@Configuration @EnableWebSocketMessageBroker public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { @Override public void configureMessageBroker(MessageBrokerRegistry config) { config.enableSimpleBroker("/topic") .setHeartbeatValue(new long[]{10000, 10000}); // 10秒发送心跳请求,10秒未收响应则判定断开 config.setApplicationDestinationPrefixes("/app"); } }调整GCP负载均衡超时
GCP HTTP(S)负载均衡默认30秒空闲超时,超时后LB会主动切断WebSocket连接。进入GCP控制台修改后端服务的超时时间(建议设为300秒以上),同时启用HTTP keep-alive配置。检查实例/容器资源状态
查看GCE实例或K8s Pod的CPU、内存使用率,若资源不足,JVM可能强制终止WebSocket连接。通过GCP监控面板确认是否存在资源占用峰值。排查Spring Boot配置异常
检查自定义的HandshakeInterceptor或ChannelInterceptor是否抛出未捕获异常,导致连接中断;同时确认WebSocket端点配置正确,无权限拦截逻辑误判。解决MTU分片问题
GCP网络默认MTU为1460,若WebSocket消息过大超过该值,可能引发分片失败导致断开。可限制消息大小:@Override public void configureWebSocketTransport(WebSocketTransportRegistration registration) { registration.setMessageSizeLimit(64 * 1024); // 限制单条消息最大64KB registration.setSendBufferSizeLimit(128 * 1024); }开启DEBUG日志定位细节
启用Spring Boot WebSocket相关DEBUG日志,获取连接、传输、断开的完整链路信息:logging.level.org.springframework.web.socket=DEBUG logging.level.org.springframework.messaging=DEBUG结合现有GCP日志(仅显示1006错误码无额外信息),通过DEBUG日志可区分是客户端主动断开还是服务端触发的连接终止。
内容的提问来源于stack exchange,提问作者Ajith Deivam
相关产品推荐
相关产品推荐

