App Engine Flex环境下使用ws库原生WebSocketServer无法建立连接的问题排查求助
App Engine Flex环境下使用ws库原生WebSocketServer无法建立连接的问题排查求助
大家好,我最近在搭建Yjs的WebSocket服务器时遇到了一个棘手的问题,折腾了好久没找到根因,想请各位帮忙分析下:
我用ws库的原生WebSocketServer搭建了Node.js服务,本地运行完全正常,但部署到Google App Engine Flex环境后,客户端始终无法建立WebSocket连接。以下是详细情况:
服务端简化代码
import WebSocket, { WebSocketServer } from 'ws'; const wss = new WebSocketServer({port: 1234}); wss.on('connection', (connection: WebSocket) => { connection.binaryType = 'arraybuffer'; console.log('connected'); connection.on('message', async (message: ArrayBuffer) => { console.log('message received'); }); })
App Engine的app.yaml配置
runtime: nodejs service: websocket env: flex runtime_config: operating_system: "ubuntu22" runtime_version: "22" manual_scaling: instances: 1
客户端连接情况与错误
本地测试时,用这段代码可以正常建立连接:
new WebSocket('ws://localhost:1234/id-123', []);
但部署到GCP的预发布环境后,用线上地址连接就失败了:
new WebSocket('wss://websocket-dot-my-staging.ey.r.appspot.com:1234/id-123', []);
浏览器控制台报错:
WebSocket connection to 'wss://websocket-dot-my-staging.ey.r.appspot.com:1234/id-123' failed
我的疑问与诉求
- 这个问题会不会和App Engine自动构建的安全连接机制有关?
- App Engine Flex环境到底是否支持这种原生的
WebSocketServer(不想用Socket.io这类封装库)? - 我不想切换现有的技术栈(比如换成Socket.io或者Cloud Run),因为已经花了大量时间搭建好现有架构,所以希望能找到根因直接解决问题,而不是更换技术方案。
麻烦各位帮忙看看问题出在哪了,感谢大家!
内容来源于stack exchange
相关产品推荐
相关产品推荐

