c.Apps.Realtime(ctx, appID) apre un flusso in tempo reale dei log, dello stato e degli eventi di sistema di un’app e restituisce un *squarecloud.Realtime. È un iteratore: chiama Next in un ciclo finché non restituisce un errore, e chiudilo sempre con Close.
ctx passato a Realtime governa l’intero flusso: Next non accetta argomenti. Per fermare da un’altra goroutine un ciclo bloccato in Next, annulla quel ctx.
Eventi
OgniRealtimeEvent ha Event, Data (il testo grezzo del frame) e ID (l’id dell’ultimo evento, "" se assente).
La struct Status
Terminare il flusso
Next restituisce io.EOF quando:
- il server chiude la connessione in modo pulito (ogni connessione dura fino a 10 minuti);
- il server ha inviato
REALTIME_DISCONNECTED(prima viene consegnato l’evento, poiio.EOF); - hai chiamato
Close.
ctx passato a Realtime viene annullato o la sua scadenza passa, Next restituisce il semplice ctx.Err() (context.Canceled o context.DeadlineExceeded), non un *APIError. Per uscire tu stesso dal ciclo, basta un break: il Close differito rilascia la connessione.
Per continuare a osservare oltre i 10 minuti, chiama di nuovo Realtime 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
logsostatusazzera 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.
Status unito sopravvive alle riconnessioni. Oltre 3 riconnessioni fallite, Next restituisce un *APIError con NETWORK_ERROR (status 0).
Limiti ed errori
- 5 connessioni simultanee per account e 30 per app, considerando tutti gli utenti. Superarle produce 429
REALTIME_MAX_CONNECTIONSoREALTIME_MAX_CONNECTIONS_APP. - Lo status HTTP viene controllato prima dello streaming, quindi questi errori (e il 404 per un’app sconosciuta) vengono restituiti da
Realtimestesso, prima del primoNext. - Quando
ctxnon ha una scadenza, la scadenza diWithTimeoutcopre solo l’apertura, fino all’arrivo degli header della risposta (TIMEOUTse non arrivano). Il flusso in sé non ha altra scadenza oltre actx.
Prossimi passi
Snapshot
Backup e ripristino di app e database.
Riferimento API realtime
L’endpoint REST dietro questo stream.
Log dalla CLI
Lo stesso stream dal terminale.

