client.apps.realtime(app_id) abre un stream en vivo de los logs, el estado y los eventos del sistema de una aplicación. Con SquareCloud es un iterador que se consume con for; con AsyncSquareCloud es un iterador asíncrono que se consume con async for. Úsalo en un bloque with / async with para que al salir del bloque se cierre la conexión.
- Síncrono
- Asíncrono
AsyncSquareCloud, apps.realtime(app_id) devuelve directamente un AsyncRealtime: no lo esperes con await. Un hilo lector en segundo plano entrega los eventos a tu event loop, así que no se ocupa ningún hilo del executor mientras esperas.
Eventos
Cada evento es un dict conevent, data (el texto sin procesar del frame) e id (None cuando el frame no tiene).
El objeto status
Finalizar el stream
El bucle termina por sí solo cuando:- el servidor cierra la conexión limpiamente (cada conexión dura hasta 10 minutos);
- el servidor envía
REALTIME_DISCONNECTED; - sales del bucle con
break(después sales del bloquewith, lo que cierra la conexión); - llamas a
stream.close(), desde cualquier hilo, incluso mientras el bucle espera datos o una reconexión (el bucle simplemente termina, no lanza ningún error).
close() es síncrono tanto en Realtime como en AsyncRealtime. Para seguir observando más allá de 10 minutos, abre un nuevo stream cuando termine el bucle.
Reconexión
Una conexión caída, o que el servidor delegue la reconexión en el cliente (REALTIME_RECONNECT), reabre el stream por sí sola:
- hasta 3 veces seguidas; cualquier evento
logsostatusreinicia el contador; - cada reapertura al menos 5,5 s después de la apertura anterior, para respetar el ritmo de la API de una apertura cada 5 segundos por aplicación.
SquareCloudAPIError con NETWORK_ERROR. Cada apertura es un GET, así que un error de red al abrir también se reintenta hasta max_retries veces; una apertura que sigue fallando lanza el error.
Límites y errores
- 5 conexiones simultáneas por cuenta y 30 por aplicación, sumando todos los usuarios. Superarlas da 429
REALTIME_MAX_CONNECTIONSoREALTIME_MAX_CONNECTIONS_APP. - El estado HTTP se comprueba antes del streaming, así que estos errores (y el 404 de una aplicación desconocida) se lanzan en la primera iteración.
- El timeout solo cubre la apertura, hasta que llegan los encabezados de la respuesta. El stream en sí no tiene timeout: una conexión semiabierta (un portátil que sale de suspensión) espera hasta que llames a
close().

