Skip to main content
client.apps.realtime(app_id) apre un flusso in tempo reale dei log, dello stato e degli eventi di sistema di un’app. Con SquareCloud è un iteratore da consumare con for; con AsyncSquareCloud è un iteratore asincrono da consumare con async for. Usalo in un blocco with / async with, così uscire dal blocco chiude la connessione.
Con AsyncSquareCloud, apps.realtime(app_id) restituisce direttamente un AsyncRealtime: non usare await. Un thread lettore in background passa gli eventi al tuo event loop, quindi nessun thread dell’executor resta occupato mentre attendi.

Eventi

Ogni evento è un dict con event, data (il testo grezzo del frame) e id (None quando il frame non ne ha).

L’oggetto status

Terminare il flusso

Il ciclo termina da solo quando:
  • il server chiude la connessione in modo pulito (ogni connessione dura fino a 10 minuti);
  • il server invia REALTIME_DISCONNECTED;
  • esci dal ciclo con break (poi esci dal blocco with, che chiude la connessione);
  • chiami stream.close(), da qualsiasi thread, anche mentre il ciclo attende dati o una riconnessione (il ciclo semplicemente termina, non solleva eccezioni).
close() è sincrono sia su Realtime sia su AsyncRealtime. Per continuare a osservare oltre i 10 minuti, apri un nuovo flusso quando il ciclo termina.

Riconnessione

Una connessione interrotta, o il server che delega la riconnessione al client (REALTIME_RECONNECT), riapre il flusso da sola:
  • fino a 3 volte di fila; qualsiasi evento logs o status azzera il conteggio;
  • ogni riapertura avviene almeno 5,5 s dopo l’apertura precedente, per restare sotto il ritmo dell’API di un’apertura ogni 5 secondi per app.
Oltre 3 riconnessioni fallite, il ciclo solleva un SquareCloudAPIError con NETWORK_ERROR. Ogni apertura è un GET, quindi anche un errore di rete durante l’apertura viene ripetuto fino a max_retries volte; un’apertura che continua a fallire solleva un’eccezione.

Limiti ed errori

  • 5 connessioni simultanee per account e 30 per app, considerando tutti gli utenti. Superarle produce 429 REALTIME_MAX_CONNECTIONS o REALTIME_MAX_CONNECTIONS_APP.
  • Lo status HTTP viene controllato prima dello streaming, quindi questi errori (e il 404 per un’app sconosciuta) vengono sollevati alla prima iterazione.
  • Il timeout copre solo l’apertura, fino all’arrivo degli header della risposta. Il flusso in sé non ha timeout: una connessione semiaperta (un portatile che si riattiva dalla sospensione) resta in attesa finché non chiami close().