我使用名为 glitch.me 的服务来托管我的 Node.js 项目,它们只允许您在内部打开一个端口。目前,我的 Node.js 服务器只能处理 HTTP 请求,但 glitch.me 为我代理我的流量,有效地允许客户端使用 HTTPS 进行间接通信。我的项目在很大程度上依赖于 WebSockets 的使用,当通过 example.glitch.me(glitch.me 提供的 url)直接访问它时,它们可以完美地工作。但是,我需要将此项目连接到我的自定义域(example.xyz),其所有流量都通过 Cloudflare 代理。但是,当尝试通过我的自定义域(换句话说:通过 Cloudflare)建立 WebSocket 连接时,永远不会建立套接字连接。
现在,我意识到这听起来很具体,但我认为可以在这里概括:
WebSockets 工作:
- 客户端 => glitch.me => 我的后端
- 客户端 => A => 我的后端
网络套接字不工作:
- 客户端 => cloudflare => glitch.me => 我的后端
- 客户端 => A => B => 我的后端
注意: HTTP/HTTPS 仍然适用于这两个域。
每次建立 WebSocket 连接时,我都会在服务器端添加日志记录,果然服务器接收到了连接!但是,客户端永远不会收到通知,并且在 Chrome 开发者工具中它显示请求从未完成。请记住,当流量未通过 Cloudflare 路由时,一切正常。
我完全理解您可能无法根据提供给您的信息解决我的问题,但我并不是要您这样做。我的问题很简单:问题出在哪里?我的后端的响应是否一直卡在某个地方并且没有一直到达?我已经联系了 glitch.me 和 Cloudflare,他们都确认他们完全支持 WebSocket 流量。
我的问题最可能的原因是什么?从那里我可能可以修复它!
编辑:我在后端使用npm上的 ws 包,在前端使用标准 JavaScript WebSockets。