websocket закрывает соединение на облачной платформе Google - PullRequest
0 голосов
/ 21 января 2019

У меня установлено Java-приложение websocket на виртуальной машине вычислительного движка облачной платформы Google. Если запрос проходит через балансировщик нагрузки Google, веб-сокет автоматически закрывается, однако, если я получаю доступ по 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"

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Увеличение значений времени ожидания на бэкэнде обычно решает эти типы проблем.

Вы также можете посмотреть Session Affinity , которая все еще находится в бета-версии.

0 голосов
/ 21 января 2019

Согласно документации , балансировщик нагрузки GCP изначально поддерживает веб-сокеты и может выступать в качестве прокси-сервера, если выполняются следующие условия:

  • После успешного подключенияклиент выдает запрос на обновление веб-сокета.
  • Серверная часть (в вашем случае приложение Java) выдает успешный ответ на обновление веб-сокета.

Я бы проверял в журналах балансировщика нагрузки GCP или вJava-приложение регистрирует ошибку во время рукопожатия websocket.Я бы искал ошибку, похожую на this

Если это так, я бы посоветовал проверить вашу обработку кода ответа на обновление Websocket.

Надеюсь, это поможет.

...