A implantação do Serviço de Aplicativo do Azure não fecha a conexão do WebSockets do Node.js

1

Antecedentes

Estou tendo problemas com uma implantação do Serviço de Aplicativo do Azure. Estou usando o VSTS para fazer a implantação usando o recurso Implantação do serviço de Aplicativo do Azure. Estou implantando um contêiner Docker em um slot do Linux App Service. O contêiner do Docker está executando um servidor WebSocket do Node.js que, ao conectar, retorna mensagens com a versão atual do aplicativo com base em um arquivo de texto criado como parte da compilação.

No meu aplicativo cliente, eu o configuro para pegar a versão do aplicativo do servidor WebSocket quando uma mensagem chega. Sua função é determinar se a versão do servidor WebSocket corresponde à versão do cliente. Quando a conexão WebSocket é perdida devido a uma reinicialização ou uma implantação, o aplicativo cliente tentará se reconectar até que o servidor WebSocket volte a ficar online.

Problema

As implantações parecem criar duas versões do serviço de aplicativo. Um é o original e o outro é a implantação mais recente. Se eu tiver uma janela do navegador aberta, ela deverá notar uma implantação ocorrida e me notificar que a versão do aplicativo foi alterada. Isso parece acontecer esporadicamente.

A única maneira de garantir que o aplicativo cliente perceba a alteração da versão do aplicativo é reiniciar manualmente o serviço do aplicativo por meio do portal do Azure ou atualizando a janela do navegador. Caso contrário, o navegador não acionará o WebSocket onclose ou acionará entre 2-40 minutos depois. Enquanto estou bem com 2 minutos, não estou nada bem com mais de 5.

Testes

Quando executo isso localmente, não tenho nenhum desses problemas, por isso os atribuo ao ambiente do Azure.

Quando faço o lançamento de implantação no VSTS, ele parece aleatório quando a conexão do WebSocket é fechada, mas ocorre dentro desse intervalo de tempo de 2-40 minutos.

Eu tentei configurar meu VSTS Release para reiniciar o Serviço de Aplicativo após a implantação, mas apenas alguns navegadores notaram o fechamento da conexão WebSocket.

Em outra versão do VSTS, reiniciei o serviço de aplicativo antes de implantá-lo. Isso funcionou para apenas 50% das implantações. O resto não acionaria.

Eu também tentei configurar o VSTS Release para parar o serviço do aplicativo, implantar a alteração e, em seguida, iniciá-lo novamente. Isso tinha cerca de 80% de chance de atualizar a versão implantada.

Pergunta

Como posso garantir que, após uma implantação em um Serviço de Aplicativo do Azure, a conexão anterior com o WebSocket seja desconectada imediatamente e não em um horário indeterminado posterior?

    
por Sawtaytoes 21.12.2017 / 05:00

0 respostas