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), oferece 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 multiplayer
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. O uso do WebSocket é cobrado pelo uso da conexão até o tempo limite ou o encerramento do soquete.
Como executar um aplicativo de amostra com WebSockets
Os exemplos de código neste documento descrevem como executar um aplicativo de exemplo com Websockets.
Pré-requisitos e configuração
Primeiro, siga as instruções em Como configurar o ambiente de desenvolvimento para configurar o ambiente e o projeto e entender como os apps 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
:
Executar a amostra localmente
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. 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