client.apps.realtime(app_id) は、アプリのログ、ステータス、システムイベントのライブストリームを開きます。SquareCloud では for で消費するイテレーター、AsyncSquareCloud では async for で消費する非同期イテレーターです。with / async with ブロック内で使えば、ブロックを抜けたときに接続が閉じられます。
- 同期
- 非同期
AsyncSquareCloud では、apps.realtime(app_id) は AsyncRealtime を直接返します。await しないでください。バックグラウンドの読み取りスレッドがイベントをイベントループに渡すため、待機中にエグゼキューターのスレッドが占有されることはありません。
イベント
すべてのイベントは、event、data (生のフレームテキスト)、id (フレームにない場合は None) を持つ dict です。
status オブジェクト
ストリームの終了
ループは次の場合に自動的に終了します:- サーバーが接続を正常に閉じたとき (各接続は最大 10 分続きます)
- サーバーが
REALTIME_DISCONNECTEDを送信したとき - ループから
breakしたとき (その後withブロックを抜けると接続が閉じられます) - 任意のスレッドから
stream.close()を呼び出したとき。ループがデータや再接続を待っている最中でも有効です (ループは単に終了し、例外は送出されません)
close() は Realtime と AsyncRealtime のどちらでも同期です。10 分を超えて監視を続けるには、ループが終了したときに新しいストリームを開いてください。
再接続
接続が切れた場合や、サーバーが再接続をクライアントに委ねた場合 (REALTIME_RECONNECT)、ストリームは自動的に再び開かれます:
- 連続 3 回まで。
logsまたはstatusのイベントを受け取るとカウントはリセットされます - API の制限 (アプリごとに 5 秒に 1 回のオープン) を下回るよう、各再オープンは前回のオープンから最低 5.5 秒空けて行われます
NETWORK_ERROR の SquareCloudAPIError を送出します。各オープンは GET なので、オープン中のネットワークエラーも最大 max_retries 回リトライされます。それでも失敗したオープンは例外を送出します。
制限とエラー
- 同時接続数は、全ユーザー合計でアカウントごとに 5、アプリごとに 30 です。超過すると 429
REALTIME_MAX_CONNECTIONSまたはREALTIME_MAX_CONNECTIONS_APPになります。 - HTTP ステータスはストリーミングの前にチェックされるため、これらのエラー (および不明なアプリに対する 404) は最初の反復で送出されます。
- タイムアウトは、レスポンスヘッダーが届くまでのオープン処理のみが対象です。ストリーム自体にタイムアウトはありません。半開きの接続 (スリープから復帰したノート PC など) は、
close()を呼び出すまで待ち続けます。

