client.apps.realtime(app_id) öffnet einen Live-Stream der Logs, des Status und der Systemereignisse einer App. Mit SquareCloud ist es ein Iterator, den du mit for verarbeitest; mit AsyncSquareCloud ist es ein Async Iterator, den du mit async for verarbeitest. Verwende ihn in einem with- / async with-Block, damit das Verlassen des Blocks die Verbindung schließt.
- Synchron
- Asynchron
AsyncSquareCloud gibt apps.realtime(app_id) direkt ein AsyncRealtime zurück: Rufe es nicht mit await auf. Ein Lese-Thread im Hintergrund liefert die Ereignisse an deine Event Loop, sodass während des Wartens kein Executor-Thread belegt ist.
Ereignisse
Jedes Ereignis ist ein Dict mitevent, data (dem rohen Text des Frames) und id (None, wenn der Frame keine hat).
Das Objekt status
Den Stream beenden
Die Schleife endet von selbst, wenn:- der Server die Verbindung sauber schließt (jede Verbindung dauert bis zu 10 Minuten);
- der Server
REALTIME_DISCONNECTEDsendet; - du mit
breakaus der Schleife aussteigst (verlasse dann denwith-Block, der die Verbindung schließt); - du
stream.close()aus einem beliebigen Thread aufrufst, selbst während die Schleife auf Daten oder auf eine Neuverbindung wartet (die Schleife endet einfach, sie wirft nicht).
close() ist sowohl bei Realtime als auch bei AsyncRealtime synchron. Um länger als 10 Minuten zuzusehen, öffne einen neuen Stream, wenn die Schleife endet.
Neuverbindung
Eine abgebrochene Verbindung, oder wenn der Server die Neuverbindung an den Client übergibt (REALTIME_RECONNECT), öffnet den Stream von selbst erneut:
- bis zu 3 Mal hintereinander; jedes
logs- oderstatus-Ereignis setzt den Zähler zurück; - jedes erneute Öffnen mindestens 5,5 s nach dem vorherigen, um unter dem Takt der API von einem Öffnen pro 5 Sekunden pro App zu bleiben.
SquareCloudAPIError mit NETWORK_ERROR. Jedes Öffnen ist ein GET, daher wird auch ein Netzwerkfehler beim Öffnen bis zu max_retries Mal wiederholt; ein Öffnen, das weiterhin fehlschlägt, wirft.
Limits und Fehler
- 5 gleichzeitige Verbindungen pro Konto und 30 pro App, über alle Benutzer hinweg. Eine Überschreitung ergibt 429
REALTIME_MAX_CONNECTIONSoderREALTIME_MAX_CONNECTIONS_APP. - Der HTTP-Status wird vor dem Streaming geprüft, daher werfen diese Fehler (und 404 für eine unbekannte App) bei der ersten Iteration.
- Das Timeout deckt nur das Öffnen ab, bis die Antwort-Header eintreffen. Der Stream selbst hat kein Timeout: Eine halb offene Verbindung (ein Laptop, der aus dem Ruhezustand erwacht) wartet, bis du
close()aufrufst.

