Skip to main content
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.
Com o 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 com event, 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 bloco with, 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 logs ou status zera 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.
Após 3 reconexões falhas, o loop lança um 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_CONNECTIONS ou REALTIME_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().