Google cloud platform GCP HTTP负载平衡器-Websocket正在升级,但没有来自客户端的帧

Google cloud platform GCP HTTP负载平衡器-Websocket正在升级,但没有来自客户端的帧,google-cloud-platform,Google Cloud Platform,我刚刚注意到gcp http(s)负载平衡器现在支持WebSocket。我去试了一下,发现有些问题。我有一个gloabl https负载平衡器设置,带有云CDN和一个简单的、没有url映射的后端(Node.js)。当我去建立websocket连接时,我得到了一个成功的升级响应,但当我去发送帧到服务器时,它们从未被接收到。服务器可以将帧发送回客户端。这几乎就像负载平衡器不知道连接已升级,因此不允许从客户端发送任何数据一样 当我在日志中查找https负载平衡器时,我看到101交换协议响应,然后sta

我刚刚注意到gcp http(s)负载平衡器现在支持WebSocket。我去试了一下,发现有些问题。我有一个gloabl https负载平衡器设置,带有云CDN和一个简单的、没有url映射的后端(Node.js)。当我去建立websocket连接时,我得到了一个成功的升级响应,但当我去发送帧到服务器时,它们从未被接收到。服务器可以将帧发送回客户端。这几乎就像负载平衡器不知道连接已升级,因此不允许从客户端发送任何数据一样

当我在日志中查找https负载平衡器时,我看到101交换协议响应,然后statusDetails是“部分响应后的客户端断开连接”,几乎就像是一个正常的http请求


任何帮助都将不胜感激。

经过一些调查,当GCP负载平衡器通过GCP CDN时,客户端消息似乎永远不会到达后端

我通过在一个名为“websocket prototype”的新后端中复制我想要的后端配置来解决这个问题,然后只是更改websocket prototype的“use cdn”设置。最后,我将websocket服务器的路径映射到没有CDN的配置


您发现问题了吗?我也遇到了同样的问题。啊,这是有道理的。伟大的发现!我们必须为websocket连接创建一个单独的后端,这有点糟糕,但我想这比使用ssl负载平衡器要好(我为websocket创建了一个单独的域)。希望我们能得到云cdn的支持。所以我刚刚把这些更改添加到我的网站上,它们工作得很好。改变发生需要一段时间,所以一开始我有点担心。请注意,您必须将请求超时更改为9999999秒,否则它将过早关闭您的连接(即使您像我一样发送ping/pong以使其保持活动状态),将请求超时增加到172800(48小时)也解决了我的问题。使用路径为websocket和非websocket连接创建不同的后端是一个很好的解决方法!我还等了15-20分钟,等待改变的发生。