Como criar conexões permanentes com WebSockets

ID da região

O REGION_ID é um código que o Google atribui com base na região selecionada ao criar o aplicativo. A inclusão de REGION_ID.r nos URLs do App Engine é opcional para aplicativos atuais e em breve será obrigatória para todos os aplicativos novos.

Para garantir uma transição tranquila, estamos atualizando lentamente o App Engine para usar códigos da região. Se ainda não tivermos atualizado seu projeto do Google Cloud, você não verá um ID da região para o aplicativo. Como o ID é opcional para os aplicativos atuais, não é necessário atualizar os URLs ou fazer outras alterações quando o ID da região está disponível para os aplicativos já existentes.

Saiba mais sobre IDs da 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 o Go no Google App Engine para configurar seu ambiente e projeto e entender como os aplicativos Go 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/golang-samples
cd golang-samples/appengine_flexible/websockets/

Executar a amostra localmente

Para executar o aplicativo de amostra no computador local, siga estas etapas:

  1. Inicie um servidor da Web local.

    go run *.go
    
  2. No navegador da Web, digite este endereço:

    http://localhost:8080
    

Implantar e executar a amostra no App Engine

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.
  • 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