Puedes usar WebSockets para crear una conexión persistente desde un cliente (como un dispositivo móvil o un ordenador) a una instancia de App Engine. La conexión abierta permite el intercambio de datos bidireccional entre el cliente y el servidor en cualquier momento, lo que se traduce en una latencia más baja y un mejor uso de los recursos.
WebSockets
El protocolo WebSockets, definido en el RFC 6455, proporciona un canal de comunicación bidireccional entre un cliente y un servidor. El canal se inicia a partir de una solicitud HTTP(S) con un encabezado "upgrade".
Estos son algunos de los usos habituales de WebSockets:
- Actualizaciones de eventos en tiempo real, como feeds de redes sociales, resultados deportivos, noticias o precios de la bolsa
- Notificaciones de usuario, como actualizaciones de software o de contenido
- Aplicaciones de chat
- Herramientas de edición colaborativa
- Juegos multijugador
Los WebSockets están siempre disponibles para tu aplicación sin necesidad de configuración adicional. Una vez que se haya establecido una conexión WebSockets, se agotará el tiempo de espera al cabo de una hora. El uso de WebSocket se factura por uso de la conexión hasta que se agota el tiempo de espera o se cierra el socket.
Ejecutar una aplicación de muestra con WebSockets
En los ejemplos de código de este documento se describe cómo ejecutar una aplicación de ejemplo con WebSockets.
Requisitos previos y configuración
Sigue las instrucciones de la sección Configurar el entorno de desarrollo para configurar tu entorno y tu proyecto, así como para saber cómo se estructuran las aplicaciones.
Clonar la aplicación de ejemplo
Copia las aplicaciones de ejemplo en tu máquina local y ve al directorio websockets
:
Ejecutar la muestra de forma local
Desplegar y ejecutar el ejemplo en App Engine
Afinidad de sesión
No todos los clientes admiten WebSockets. Para solucionar este problema, muchas aplicaciones usan bibliotecas como socket.io, que recurren al sondeo largo de HTTP con clientes que no admiten WebSockets.
App Engine suele distribuir las solicitudes de forma uniforme entre las instancias disponibles. Sin embargo, cuando se usa el sondeo largo de HTTP, varias solicitudes secuenciales de un usuario determinado deben llegar a la misma instancia.
Para permitir que App Engine envíe solicitudes del mismo usuario a la misma instancia, puedes habilitar la afinidad de sesión. A continuación, App Engine identifica qué solicitudes envían los mismos usuarios inspeccionando una cookie y dirige esas solicitudes a la misma instancia.
La afinidad de sesión en App Engine se implementa en la medida de lo posible. Cuando desarrolles tu aplicación, siempre debes asumir que la afinidad de sesión no está garantizada. Un cliente puede perder la afinidad con la instancia de destino en los siguientes casos:
- El autoescalador de App Engine puede añadir o quitar instancias que sirvan a tu aplicación. Es posible que la aplicación reasigne la carga y que la instancia de destino se mueva. Para minimizar este riesgo, asegúrate de haber definido el número mínimo de instancias para gestionar la carga prevista.
- Si la instancia de destino no supera las comprobaciones del estado, App Engine mueve la sesión a una instancia en buen estado. Para obtener más información sobre las comprobaciones del estado y sus opciones de personalización, consulta Dividir comprobaciones del estado.
- La afinidad de sesión se pierde cuando se reinicia una instancia para realizar tareas de mantenimiento o actualizaciones de software. Las instancias de máquina virtual del entorno flexible de App Engine se reinician semanalmente.
Como la afinidad de sesión no está garantizada, solo debes usarla para aprovechar la capacidad de socket.io
y otras bibliotecas de recurrir al sondeo largo HTTP en los casos en los que se interrumpa la conexión. Nunca debes usar la afinidad de sesión para crear aplicaciones con estado.
Habilitar e inhabilitar la afinidad de sesión
De forma predeterminada, la afinidad de sesión está inhabilitada en todas las aplicaciones de App Engine. La afinidad de sesión se define a nivel de versión de la 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, añade la siguiente entrada a tu archivo app.yaml
:
network:
session_affinity: true
Una vez que se haya implementado la versión con el archivo app.yaml actualizado, las nuevas solicitudes empezarán a servirse desde la misma instancia mientras esté disponible.
Para desactivar la afinidad de sesión, elimine la entrada del archivo app.yaml
o asigne el valor "false":
network:
session_affinity: false