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)。

status 对象

结束流

在以下情况下,循环会自行结束:
  • 服务器正常关闭连接(每个连接最长持续 10 分钟);
  • 服务器发送 REALTIME_DISCONNECTED;
  • 你使用 break 跳出循环(随后离开 with 代码块,从而关闭连接);
  • 你从任意线程调用 stream.close(),即使循环正在等待数据或重新连接(循环直接结束,不会抛出异常)。
close() 在 Realtime 和 AsyncRealtime 上都是同步的。如需在 10 分钟后继续观察,请在循环结束时打开一个新的流。

重新连接

连接断开,或服务器将重新连接交由客户端处理(REALTIME_RECONNECT)时,流会自行重新打开:
  • 最多连续 3 次;任何 logs 或 status 事件都会重置计数;
  • 每次重新打开距上一次打开至少 5.5 秒,以保持在 API 每个应用每 5 秒打开一次的速率之内。
重新连接失败超过 3 次后,循环会抛出带有 NETWORK_ERROR 的 SquareCloudAPIError。每次打开都是一个 GET,因此打开时发生的网络错误也会被重试,最多 max_retries 次;仍然失败的打开会抛出异常。

限制和错误

  • 每个账户 5 个并发连接,每个应用 30 个(涵盖所有用户)。超出时返回 429 REALTIME_MAX_CONNECTIONS 或 REALTIME_MAX_CONNECTIONS_APP。
  • HTTP 状态会在开始流式传输之前检查,因此这些错误(以及未知应用的 404)会在第一次迭代时抛出。
  • 超时只覆盖打开阶段,直到响应头到达为止。流本身没有超时:半开的连接(例如从睡眠中恢复的笔记本电脑)会一直等待,直到你调用 close()。