Por que uma conexão por meio do WebSocket é fechada após 60 segundos?

Nuvem privada virtual Infraestrutura clássica

Seu serviço Ingresso expõe um app que usa um WebSocket. No entanto, a conexão entre um cliente e o app WebSocket é fechada quando nenhum tráfego é enviado entre eles por 60 segundos.

A conexão com seu app WebSocket pode cair após 60 segundos de inatividade por um dos motivos a seguir:

  • A sua conexão de Internet tem um proxy ou firewall que não tolera conexões longas.
  • Um tempo limite no ALB para o app WebSocket finaliza a conexão.

Para evitar que a conexão seja fechada após 60 segundos de inatividade:

  1. Se você se conectar ao seu app WebSocket por meio de um proxy ou firewall, certifique-se de que o proxy ou o firewall não esteja configurado para finalizar automaticamente as conexões longas.

  2. Para manter a conexão ativa, é possível aumentar o valor do tempo limite ou configurar uma pulsação em seu app.

    • Mude o tempo limite: aumente o valor do proxy-read-timeout em sua configuração do ALB. Por exemplo, para mudar o tempo limite de 60s para um valor maior como 300s, inclua esta anotação em seu arquivo de recursos do Ingress: nginx.ingress.kubernetes.io/proxy-read-timeout: 300. O tempo limite é mudado para todos os ALBs públicos em seu cluster.
    • Configure uma pulsação: se você não quiser mudar o valor de tempo limite de leitura padrão do ALB, configure uma pulsação em seu app WebSocket. Quando você configura um protocolo de heartbeat usando uma estrutura como o WAMP, o servidor upstream do aplicativo envia periodicamente uma mensagem ping em um intervalo de tempo e o cliente responde com uma mensagem pong. Defina o intervalo de heartbeat para 58 segundos ou menos para que o tráfego ping/pong mantenha a conexão aberta antes que o tempo limite de 60 segundos seja aplicado.