Como criar conexões permanentes com WebSockets

ID da região

O REGION_ID é um código abreviado que o Google atribui com base na região que você selecionou ao criar o aplicativo. O código não corresponde a um país ou estado, ainda que alguns IDs de região sejam semelhantes aos códigos de país e estado geralmente usados. Para aplicativos criados após fevereiro de 2020, o REGION_ID.r está incluído nos URLs do App Engine. Para apps existentes criados antes dessa data, o ID da região é opcional no URL.

Saiba mais sobre IDs de região.

Use os WebSockets para criar uma conexão permanente de um cliente (como um dispositivo móvel ou um computador) com uma instância do App Engine. A conexão aberta permite uma troca de dados entre o cliente e o servidor a qualquer momento, resultando em menor latência e melhor uso dos recursos.

WebSockets

O protocolo WebSockets, definido na RFC 6455 (em inglês), fornece um canal de comunicação full-duplex entre um cliente e um servidor. O canal é iniciado a partir de uma solicitação HTTP(S) com um cabeçalho de "upgrade".

Os casos de uso típicos dos WebSockets incluem:

  • atualizações de eventos em tempo real, como feeds de mídia social, placares esportivos, cotações do mercado de ações ou notícias;
  • notificações do usuário, como atualizações de software ou conteúdo;
  • aplicativos de bate-papo;
  • ferramentas de edição colaborativa;
  • jogos com modo multijogador.

Os WebSockets estão sempre disponíveis para seu aplicativo sem qualquer configuração adicional. Depois que uma conexão de WebSockets for estabelecida, ela expirará após uma hora.

Como executar um aplicativo de amostra com WebSockets

Primeiro, siga as instruções em "Hello, World!" para .NET no App Engine para configurar seu ambiente e projeto e entender como os aplicativos . NET do App Engine são estruturados.

Clonar o aplicativo de amostra

Copie os aplicativos de amostra para sua máquina local e navegue para o diretório websockets:

git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples
cd dotnet-docs-samples/appengine/flexible/WebSocket/

Executar a amostra localmente

Para executar o aplicativo Hello World no computador, siga estas etapas:

  1. Instale o SDK do .NET Core versão 2.2 ou posterior.

  2. Execute os comandos a seguir no PowerShell:

     dotnet restore
     dotnet run
    
  3. No navegador da Web, digite este endereço:

     http://localhost:5000/chat
    

Implantar e executar a amostra no App Engine

Para implantar seu aplicativo no ambiente flexível do App Engine, execute o comando a seguir no diretório em que seu app.yaml está localizado:

gcloud beta app deploy .\bin\Debug\netcoreapp2.2\publish\app.yaml

Afinidade da sessão

Nem todos os clientes são compatíveis com WebSockets. Para resolver esse problema, muitos aplicativos usam bibliotecas como socket.io, que recorrem a pesquisas longas de http com clientes que são incompatíveis com WebSockets.

O App Engine normalmente distribui as solicitações de maneira uniforme entre as instâncias disponíveis. No entanto, ao usar a pesquisa longa de http, várias solicitações sequenciais de um determinado usuário precisam alcançar a mesma instância.

Para permitir que o App Engine envie solicitações pelo mesmo usuário para a mesma instância, ative a afinidade da sessão. Em seguida, o App Engine identifica quais solicitações são enviadas pelos mesmos usuários ao inspecionar um cookie e encaminha essas solicitações para a mesma instância.

A afinidade da sessão no App Engine é implementada com base no melhor esforço. Ao desenvolver seu aplicativo, tenha em mente que a afinidade da sessão não é garantida. Um cliente pode perder a afinidade com a instância de destino nas seguintes situações:

  • O autoescalador do App Engine pode adicionar ou remover instâncias que disponibilizam seu aplicativo. O aplicativo pode realocar a carga, e a instância de destino pode ser movida. Para minimizar esse risco, verifique se você definiu o número mínimo de instâncias para lidar com a carga esperada.
  • Se a instância de destino falhar nas verificações de integridade, o App Engine moverá a sessão para uma instância íntegra. Para mais informações sobre verificações de integridade e opções de personalização, consulte Verificações de integridade divididas.
  • A afinidade da sessão é perdida quando uma instância é reinicializada para manutenção ou atualizações de software. As instâncias de VM do ambiente flexível do App Engine são reiniciadas semanalmente.

Como a afinidade de sessão não é garantida, use-a apenas para aproveitar a capacidade de socket.io e de outras bibliotecas para recorrer à pesquisa longa de HTTP nos casos em que a conexão é interrompida. Não é recomendado usar a afinidade da sessão para criar aplicativos com estado.

Como ativar e desativar a afinidade da sessão

Por padrão, a afinidade de sessão é desativada para todos os aplicativos do App Engine. Ela é definida no nível da versão do aplicativo e pode ser ativada ou desativada durante a implantação.

Para ativar a afinidade da sessão para sua versão do App Engine, adicione a entrada a seguir ao seu arquivo app.yaml:

network:
  session_affinity: true

Depois que a versão for implantada com o app.yaml atualizado, novas solicitações começarão a ser exibidas na mesma instância, enquanto ela estiver disponível.

Para desativar a afinidade da sessão, remova a entrada do arquivo app.yaml ou defina o valor como false:

network:
  session_affinity: false