Skip to main content
client.apps.realtime(app_id) ouvre un flux en direct des logs, du statut et des événements système d’une application. Avec SquareCloud, c’est un itérateur consommé avec for ; avec AsyncSquareCloud, c’est un itérateur asynchrone consommé avec async for. Utilisez-le dans un bloc with / async with afin que la sortie du bloc ferme la connexion.
Avec AsyncSquareCloud, apps.realtime(app_id) renvoie directement un AsyncRealtime : ne l’utilisez pas avec await. Un thread de lecture en arrière-plan transmet les événements à votre boucle d’événements, de sorte qu’aucun thread d’exécution n’est occupé pendant l’attente.

Événements

Chaque événement est un dict avec event, data (le texte brut de la trame) et id (None lorsque la trame n’en a pas).

L’objet status

Fin du flux

La boucle se termine d’elle-même lorsque :
  • le serveur ferme proprement la connexion (chaque connexion dure jusqu’à 10 minutes) ;
  • le serveur envoie REALTIME_DISCONNECTED ;
  • vous sortez de la boucle avec break (puis quittez le bloc with, ce qui ferme la connexion) ;
  • vous appelez stream.close(), depuis n’importe quel thread, même pendant que la boucle attend des données ou une reconnexion (la boucle se termine simplement, elle ne lève pas d’erreur).
close() est synchrone sur Realtime comme sur AsyncRealtime. Pour continuer à observer au-delà de 10 minutes, ouvrez un nouveau flux lorsque la boucle se termine.

Reconnexion

Une connexion interrompue, ou le serveur qui confie la reconnexion au client (REALTIME_RECONNECT), rouvre le flux automatiquement :
  • jusqu’à 3 fois d’affilée ; tout événement logs ou status remet le compteur à zéro ;
  • chaque réouverture au moins 5,5 s après l’ouverture précédente, pour rester sous le rythme de l’API d’une ouverture toutes les 5 secondes par application.
Au-delà de 3 reconnexions échouées, la boucle lève une SquareCloudAPIError avec NETWORK_ERROR. Chaque ouverture est un GET : une erreur réseau pendant l’ouverture fait donc aussi l’objet de nouvelles tentatives, jusqu’à max_retries fois ; une ouverture qui échoue encore lève une erreur.

Limites et erreurs

  • 5 connexions simultanées par compte et 30 par application, tous utilisateurs confondus. Les dépasser donne 429 REALTIME_MAX_CONNECTIONS ou REALTIME_MAX_CONNECTIONS_APP.
  • Le statut HTTP est vérifié avant la diffusion, de sorte que ces erreurs (et 404 pour une application inconnue) sont levées à la première itération.
  • Le timeout ne couvre que l’ouverture, jusqu’à l’arrivée des en-têtes de réponse. Le flux lui-même n’a pas de timeout : une connexion à moitié ouverte (un ordinateur portable qui sort de veille) attend jusqu’à ce que vous appeliez close().