Vous pouvez utiliser WebSockets pour créer une connexion persistante à partir d'un client (tel qu'un appareil mobile ou un ordinateur) vers une instance App Engine. La connexion établie permet un échange de données bidirectionnel entre le client et le serveur à tout moment, ce qui réduit le temps de latence et optimise l'utilisation des ressources.
WebSockets
Le protocole WebSockets, défini dans le document RFC 6455, fournit un canal de communication en duplex intégral entre un client et un serveur. Le canal est mis en place à partir d'une requête HTTP(S) avec un en-tête "Upgrade".
Cas d'utilisation types de WebSockets :
- Mises à jour d'événements en temps réel, telles que les flux sur les médias sociaux, les résultats sportifs, les actualités ou les cours boursiers
- Notifications utilisateur, telles que les mises à jour de logiciels ou de contenus
- Applications de chat
- Outils d'édition collaboratifs
- Jeux multijoueurs
Les WebSockets sont toujours disponibles pour votre application sans qu'aucune configuration supplémentaire ne soit nécessaire. Une fois la connexion WebSockets établie, elle expire au bout d'une heure. L'utilisation du WebSocket est facturée en fonction de l'utilisation de la connexion jusqu'à l'expiration du délai ou la fermeture du socket.
Exécuter un exemple d'application avec WebSockets
Prérequis et préparation
Les exemples de code de ce document décrivent comment exécuter un exemple d'application avec WebSockets dans les versions 3.7 et antérieures de l'environnement d'exécution Python. Pour les versions 3.8 et ultérieures de Python, consultez la page Environnement d'exécution Python pour en savoir plus sur l'utilisation des versions plus récentes.
Suivez les instructions de la section Configurer votre environnement de développement pour configurer votre environnement et votre projet, et pour comprendre la structure des applications.
Cloner l'exemple d'application
Copiez les exemples d'applications sur votre ordinateur local, puis accédez au répertoire websockets
:
git clone https://github.com/GoogleCloudPlatform/python-docs-samples
cd python-docs-samples/appengine/flexible_python37_and_earlier/websockets/
Exécuter l'exemple en local
Pour exécuter l'exemple en local, vous devez utiliser Gunicorn avec le nœud de calcul flask_socket
:
$ gunicorn -b 127.0.0.1:8080 -k flask_sockets.worker main:app
Déployer et exécuter l'exemple d'application sur App Engine
Pour déployer votre application dans l'environnement flexible App Engine, exécutez la commande suivante à partir du répertoire dans lequel se trouve votre fichier app.yaml
:
gcloud app deploy
Vous pouvez ensuite rediriger votre navigateur vers https://PROJECT_ID.REGION_ID.r.appspot.com
.
Affinité de session
Certains clients ne sont pas compatibles avec WebSockets. Pour contourner ce problème, de nombreuses applications utilisent des bibliothèques telles que socket.io qui s'appuient sur un long polling HTTP avec des clients qui ne sont pas compatibles avec WebSockets.
En règle générale, App Engine répartit les requêtes uniformément entre les instances disponibles. Cependant, en cas de long polling HTTP, plusieurs requêtes séquentielles d'un utilisateur donné doivent atteindre la même instance.
Pour permettre à App Engine d'envoyer des requêtes du même utilisateur vers la même instance, vous pouvez activer l'affinité de session. App Engine identifie ensuite les requêtes envoyées par les mêmes utilisateurs en inspectant un cookie et achemine celles-ci vers la même instance.
.L'affinité de session dans App Engine est mise en œuvre de la manière la plus optimale possible. Lors du développement de votre application, vous devez toujours partir du principe que l'affinité de session n'est pas garantie. Un client peut perdre son affinité avec l'instance cible dans les scénarios suivants :
- L'autoscaler App Engine peut ajouter ou supprimer des instances qui diffusent votre application. L'application peut réaffecter la charge, et l'instance cible peut être déplacée. Pour réduire ce risque, assurez-vous que vous avez défini le nombre minimal d'instances permettant de gérer la charge attendue.
- Si l'instance cible échoue lors des vérifications d'état, App Engine déplace la session vers une instance opérationnelle. Pour en savoir plus sur les vérifications d'état et les options de personnalisation, consultez la section Vérifications d'état fractionnées.
- L'affinité de session est perdue lorsqu'une instance est redémarrée à des fins de maintenance ou de mise à jour logicielle. Les instances de VM de l'environnement flexible App Engine sont redémarrées toutes les semaines.
L'affinité de session n'étant pas garantie, vous ne devez l'utiliser que pour tirer parti de la capacité de socket.io
et des autres bibliothèques à se rabattre sur les interrogations longues HTTP en cas d'interruption de connexion. Vous ne devez jamais utiliser l'affinité de session pour créer des applications avec état.
Activer et désactiver l'affinité de session
.Par défaut, l'affinité de session est désactivée pour toutes les applications App Engine. Elle est définie au niveau de la version de votre application et peut être activée ou désactivée lors du déploiement.
Pour activer l'affinité de session pour votre version App Engine, ajoutez l'entrée suivante à votre fichier app.yaml
:
network:
session_affinity: true
Une fois que la version est déployée avec le fichier "app.yaml" mis à jour, la diffusion des nouvelles requêtes commence à partir de la même instance, tant que cette instance est disponible.
Pour désactiver l'affinité de session, supprimez l'entrée de votre fichier app.yaml
ou définissez la valeur sur "false" :
network:
session_affinity: false