Cómo crear conexiones continuas con WebSockets

Puedes usar WebSockets para crear una conexión continua desde un cliente (como un dispositivo móvil o una computadora) hasta una instancia de App Engine. La conexión abierta permite el intercambio de datos en dos direcciones entre el cliente y el servidor en cualquier momento, lo que genera una latencia menor y un uso mejor de los recursos.

WebSockets

El protocolo de WebSockets, definido en RFC 6455, proporciona un canal de comunicación dúplex completo entre un cliente y un servidor. El canal se inicia a partir de una solicitud HTTP(S) con un encabezado de "actualización".

Los casos prácticos típicos de WebSockets incluyen lo siguiente:

  • Actualizaciones de eventos en tiempo real, como los feeds de redes sociales, resultados deportivos, noticias o precios del mercado de valores.
  • Notificaciones de usuario, como actualizaciones de software o de contenido.
  • Aplicaciones para chatear.
  • Herramientas de edición colaborativas.
  • Juegos multijugador.

Los WebSockets siempre están disponibles para tu aplicación y no requieren de ninguna configuración adicional. Una vez establecida la conexión de WebSockets, el tiempo de espera se agotará después de una hora.

Cómo ejecutar una aplicación de muestra con WebSockets

Primero, sigue las instrucciones que aparecen en "Hello, World! para Python en App Engine, si deseas configurar tu entorno y proyecto, y comprender cómo se estructuran las apps de Python en App Engine.

Clona la app de muestra

Copia las aplicaciones de muestra en tu máquina local y navega al directorio websockets:

git clone https://github.com/GoogleCloudPlatform/python-docs-samples
cd python-docs-samples/appengine/flexible/websockets/

Ejecuta la muestra de forma local

Para ejecutar la muestra de forma local, debes usar Gunicorn con el flask_socket trabajador:

$ gunicorn -b 127.0.0.1:8080 -k flask_sockets.worker main:app

Implementa y ejecuta la muestra en App Engine

Para implementar la aplicación en el entorno de App Engine Flexible, ejecuta el siguiente comando desde el directorio donde está tu archivo app.yaml:

gcloud app deploy

Luego, puedes dirigir tu navegador a https://[YOUR_PROJECT_ID].appspot.com/

Afinidad de sesión

Algunos clientes no son compatibles con WebSockets. Para solucionar este problema, muchas aplicaciones usan bibliotecas como socket.io que recurren a http long polling con los clientes que no son compatibles con WebSockets.

Por lo general, App Engine distribuye las solicitudes de modo uniforme entre las instancias disponibles. De todas formas, cuando se usa http long polling, varias solicitudes secuenciales de un usuario determinado tienen que alcanzar la misma instancia.

Para permitir que App Engine envíe solicitudes por el mismo usuario a la misma instancia, puedes habilitar la afinidad de sesión. App Engine luego identifica las solicitudes que se envían desde los mismos usuarios con la inspección de una cookie y la enrutación de esas solicitudes a la misma instancia.

La afinidad de sesión en App Engine se implementa sobre la base del "mejor esfuerzo". Cuando se implementa una aplicación, siempre se debe suponer que la afinidad de sesión no está garantizada. Un cliente puede perder afinidad con la instancia de destino en estas situaciones:

  • El escalador automático de App Engine puede agregar o quitar las instancias que entrega tu aplicación. La aplicación podría reasignar la carga y se podría mover la instancia de destino. Con el fin de minimizar este riesgo, asegúrate de configurar el número mínimo de instancias para manejar la carga esperada.
  • Si la instancia de destino no pasa las verificaciones de estado, App Engine mueve la sesión a una instancia en buen estado.
  • La afinidad de sesión se pierde cuando una instancia se reinicia por mantenimiento o por actualizaciones de software. Las instancias de VM del entorno flexible de App Engine se reinician cada semana.

Debido a que la afinidad de sesión no está garantizada, solo debes usarla con el fin de aprovechar la capacidad de socket.io y de otras bibliotecas para recurrir a HTTP long polling en los casos en que la conexión se interrumpa. Nunca debes usar la afinidad de sesión para compilar aplicaciones con estado.

Cómo inhabilitar y habilitar la afinidad de sesión

De forma predeterminada, la afinidad de sesión está inhabilitada para todas las aplicaciones de App Engine. La afinidad de sesión se configura en el nivel de versión de tu aplicación y se puede habilitar o inhabilitar durante la implementación.

Para habilitar la afinidad de sesión en tu versión de App Engine, agrega la siguiente entrada a tu archivo app.yaml:

network:
  session_affinity: true

Una vez que la versión se implementa con el archivo app.yaml actualizado, las solicitudes nuevas comenzarán a entregarse desde la misma instancia siempre que esta esté disponible.

Para desactivar la afinidad de sesión, quita la entrada del archivo app.yaml o configura el valor como falso:

network:
  session_affinity: false
¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Documentación del entorno de App Engine Flexible para Python