【问题标题】:websocket closes connection on google cloud platformwebsocket关闭谷歌云平台上的连接
【发布时间】:2019-06-15 02:07:36
【问题描述】:

我在谷歌云平台计算引擎的虚拟机上安装了一个 websocket java 应用程序。如果请求通过谷歌负载均衡器,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"

【问题讨论】:

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


    【解决方案1】:

    根据documentation,GCP负载均衡器原生支持websockets,只要满足以下条件就可以充当代理:

    • 连接成功后,客户端发出 websocket 升级请求。
    • 后端(在您的情况下是 Java 应用程序)发出成功的 websocket 升级响应。

    如果在 websocket 握手期间出现错误,我会检查 GCP 负载平衡器日志或 Java 应用程序日志。我会寻找类似于this的错误

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

    希望对你有帮助。

    【讨论】:

    • 我已经添加了我在 nginx 中看到的请求/响应。在 chrome 中我没有看到任何握手错误,连接已成功建立,然后在 100 秒左右后自动关闭
    • 我已经部署了一个基于 stomp 的 websocket,它似乎工作正常。我看到心跳数据帧被发送到客户端和服务器。可能是我需要调整以保持连接处于活动状态而不是关闭
    【解决方案2】:

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

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

    【讨论】:

    • 我增加了后端的超时值,负载均衡器后面只有一个实例,所以我认为会话亲和性不会在这里应用
    • 您遇到的错误是什么?我在您发布的日志示例中找不到任何错误消息。您能否向我们提供有关您的应用程序在做什么的更多详细信息?还有一个parameter in nginx 跟踪请求正文的连续写入之间的时间长度,默认为 60 秒。你也检查过这个吗?您多久发送一次数据?我们需要更多细节来了解正在发生的事情。
    • 发送心跳消息解决了这个问题。我没有收到错误,但套接字会自动关闭
    猜你喜欢
    • 1970-01-01
    • 2017-04-11
    • 2015-08-17
    • 2021-11-17
    • 2019-02-27
    • 1970-01-01
    • 2020-06-02
    • 2020-12-27
    • 1970-01-01
    相关资源
    最近更新 更多