Skip to main content
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 秒空けて行われます
再接続に 3 回失敗すると、ループは NETWORK_ERROR の SquareCloudAPIError を送出します。各オープンは GET なので、オープン中のネットワークエラーも最大 max_retries 回リトライされます。それでも失敗したオープンは例外を送出します。

制限とエラー

  • 同時接続数は、全ユーザー合計でアカウントごとに 5、アプリごとに 30 です。超過すると 429 REALTIME_MAX_CONNECTIONS または REALTIME_MAX_CONNECTIONS_APP になります。
  • HTTP ステータスはストリーミングの前にチェックされるため、これらのエラー (および不明なアプリに対する 404) は最初の反復で送出されます。
  • タイムアウトは、レスポンスヘッダーが届くまでのオープン処理のみが対象です。ストリーム自体にタイムアウトはありません。半開きの接続 (スリープから復帰したノート PC など) は、close() を呼び出すまで待ち続けます。