websocket关闭google cloud平台上的连接

时间:2019-01-21 16:31:03

标签: google-cloud-platform google-compute-engine spring-websocket java-websocket

我在Google Cloud Platform计算引擎的VM上安装了一个websocket java应用程序。如果请求通过google负载均衡器,则websocket会自动关闭,但是如果我使用IP访问,它将可以正常工作。我已经将后端服务超时增加到86400秒,但是它不能解决任何线索吗?

location /openWebSocket {

proxy_pass          http://127.0.0.1:8080;
proxy_http_version  1.1;

proxy_set_header    Connection          $connection_upgrade;
proxy_set_header    Upgrade             $http_upgrade;
proxy_set_header    Host                $host;
proxy_set_header    X-Real-IP           $remote_addr;
proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
proxy_read_timeout 7d;
proxy_send_timeout 7d;
keepalive_timeout 7d;

}

下面是nginx access.log信息

[21/Jan/2019:21:16:57 +0000] "GET /openWebSocket HTTP/1.1" 
101 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 
(KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"
 [21/Jan/2019:21:17:00 +0000] "GET / HTTP/1.1" 200 612 "-" 
"GoogleHC/1.0"
[21/Jan/2019:21:17:00 +0000] "GET / HTTP/1.1" 200 612 "-" 
"GoogleHC/1.0"
[21/Jan/2019:21:17:00 +0000] "GET / HTTP/1.1" 200 612 "-" 
"GoogleHC/1.0"

3 个答案:

答案 0 :(得分:0)

根据documentation,GCP负载平衡器本机支持websocket,只要满足以下条件,就可以充当代理:

  • 成功连接后,客户端会发出Websocket升级请求。
  • 后端(在您的情况下为Java应用)将发出成功的Websocket升级响应。

我将在GCP负载平衡器日志或Java应用程序日志中检查websocket握手期间是否存在错误。我会寻找类似于this

的错误

如果是这样,我建议您检查Websocket升级响应的代码处理。

希望有帮助。

答案 1 :(得分:0)

增加后端的超时值通常可以解决这些类型的问题。

您也可以查看目前仍处于测试阶段的Session Affinity

答案 2 :(得分:0)

谢谢大家的投入和指导。

发送心跳消息可以解决此问题。