client.apps.realtime(app_id) abre um stream ao vivo dos logs, do status e dos eventos de sistema de uma aplicação. Com o SquareCloud ele é um iterador consumido com for; com o AsyncSquareCloud ele é um iterador assíncrono consumido com async for. Use-o em um bloco with / async with para que sair do bloco feche a conexão.
- Síncrono
- Assíncrono
AsyncSquareCloud, apps.realtime(app_id) retorna um AsyncRealtime diretamente: não use await nele. Uma thread de leitura em segundo plano entrega os eventos ao seu event loop, então nenhuma thread do executor fica ocupada enquanto você espera.
Eventos
Todo evento é um dict comevent, data (o texto bruto do frame) e id (None quando o frame não tem um).
O objeto status
Encerrando o stream
O loop termina sozinho quando:- o servidor fecha a conexão de forma limpa (cada conexão dura até 10 minutos);
- o servidor envia
REALTIME_DISCONNECTED; - você sai do loop com
break(e então deixa o blocowith, que fecha a conexão); - você chama
stream.close(), a partir de qualquer thread, mesmo enquanto o loop espera por dados ou por uma reconexão (o loop simplesmente termina, sem lançar erro).
close() é síncrono tanto em Realtime quanto em AsyncRealtime. Para continuar acompanhando além de 10 minutos, abra um novo stream quando o loop terminar.
Reconexão
Uma conexão perdida, ou o servidor delegando a reconexão ao cliente (REALTIME_RECONNECT), reabre o stream sozinho:
- até 3 vezes seguidas; qualquer evento
logsoustatuszera a contagem; - cada reabertura ocorre pelo menos 5,5 s após a abertura anterior, para respeitar o ritmo da API de uma abertura a cada 5 segundos por aplicação.
SquareCloudAPIError com NETWORK_ERROR. Cada abertura é um GET, então um erro de rede durante a abertura também é tentado novamente até max_retries vezes; uma abertura que ainda falhe lança o erro.
Limites e erros
- 5 conexões simultâneas por conta e 30 por aplicação, somando todos os usuários. Ultrapassar resulta em 429
REALTIME_MAX_CONNECTIONSouREALTIME_MAX_CONNECTIONS_APP. - O status HTTP é verificado antes do streaming, então esses erros (e o 404 para uma aplicação desconhecida) são lançados na primeira iteração.
- O timeout cobre apenas a abertura, até os headers da resposta chegarem. O stream em si não tem timeout: uma conexão meio aberta (um notebook saindo do modo de suspensão) espera até você chamar
close().

