Platform

什么是发布/订阅实时 API 与 webhook 的区别?

发布/订阅将事件发送给已订阅频道的客户端,而 webhook 向您的服务器发送 HTTP 请求。

一个订单页面可能需要与数据库同时进行更新。Webhook 可以触发数据库变更。然后您的服务器可以将结果状态发布到已连接的屏幕上。

Bird Realtime 通过 WebSocket 投递更新。

什么是频道、成员和连接?

频道将订阅分组。连接是一个已打开的 WebSocket。成员是与其他订阅者共享的经过身份验证的标识。

在线状态频道共享哪些成员已订阅。一个成员可以使用多个连接,例如多个浏览器标签页。

Bird 在第一个连接订阅时创建频道,在最后一个连接离开后移除频道。您只需向频道名称发布,无需创建单独的频道资源。

每个连接会收到一个标识符。您的后端使用它来批准私有订阅。发布时可以排除该连接,以避免回显其自身的更新。

如果一个成员打开三个标签页,这些标签页可以在同一个成员标识下创建三个连接。在线状态在第一个连接时报告该成员加入,在最后一个连接关闭后报告离开。因此关闭中间的标签页不会将该成员从列表中移除。

谁可以订阅?

频道的前缀决定订阅是否需要来自后端的授权。

您可以选择 1 到 164 个字符的 Bird 频道名称,使用字母、数字和 _ - = @ , . ;。将前缀包含在该长度内,以确保生成的私有名称不超过限制。

名称前缀访问权限
无私有或在线状态前缀对持有应用密钥的客户端公开。
private-您的后端批准并签名每个订阅。
presence-您的后端批准订阅并提供与订阅者共享的成员标识。
private-encrypted-私有访问,事件内容使用您控制的密钥加密。

应用密钥出现在客户端代码中,因此隐晦的公共频道名称无法保护机密数据。将应用密钥保存在您的服务器上,并用它来签署订阅审批。

对于私有订阅,客户端将其连接标识符和频道名称发送到您的授权端点。您的服务器在返回签名之前检查访问权限。该端点仅授权访问,不会像 webhook 那样接收每个已发布的事件。

这种区别在实际中意味着什么?

使用 webhook 处理服务器上的可恢复工作。使用发布/订阅向已连接的客户端推送更新。

Bird webhook 向您运营的 HTTPS 端点发送事件。重试跨度约为 27.5 小时,等待时间会根据随机变化、接收方过载和请求的延迟进行调整。该时间窗口给您的接收方足够的恢复时间。错过的事件重放可以恢复仍未成功的投递。

Realtime 频道将您发布的事件发送给已订阅的客户端。断开连接的客户端可能会错过该事件。缓存频道可以在事件仍在缓存期间将其最新事件提供给新订阅者,但不会保留中间的事件历史。

将机密的服务器端处理保留在 webhook 接收方之后。仅发布频道的授权客户端可以看到的状态。

Webhook 事件类型来自 Bird 的目录,例如 email.delivered。使用 Realtime 时,您在发布时选择应用程序的事件名称。event 名称接受 1 到 200 个字符。前缀 bird:bird_internal: 是保留的,不能用于命名您的应用程序事件。

客户端还会收到关于订阅成功、成员变更和连接计数的协议事件。这些事件描述的是连接或频道本身,而不是您应用程序的订单或消息。

如何将它们结合使用?

使用 webhook 存储的事件驱动 Realtime 更新,将其推送给已连接的客户端。

在服务器上接收业务事件。在发布之前更新持久化状态。然后发布已连接客户端需要的状态。

对于订单页面,webhook 可以触发数据库更新。然后您的服务器发布更新后的订单状态,使客户的页面无需刷新即可更新。

保持数据库状态在重新连接后可读,因为断开连接的客户端可能会错过发布。Webhook、轮询或流式传输比较了各种恢复方案。

Realtime 也有自己的 webhook,用于频道占用情况和成员加入或离开。通过仪表板配置这些 webhook,而不是通过公共 webhook API。

Realtime 概述介绍客户端连接。Webhooks介绍向您的服务器投递的请求。

简而言之

  1. 一个频道可以有多个订阅者。

    Webhook 请求发送到一个已注册的端点。一次发布会发送给订阅了该频道的所有客户端。

  2. 私有订阅需要后端授权。

    应用密钥出现在客户端代码中。私有和在线状态前缀需要来自您服务器的签名。

  3. 成员可以拥有多个连接。

    一个成员使用三个标签页时,在第一个连接时加入在线状态,在最后一个连接关闭后离开。

  4. 将投递恢复与已连接视图结合使用。

    使用 webhook 恢复来处理服务器事件,并使用存储的状态在断开连接后恢复 Realtime 视图。

基于同一网络构建。

测试 API 密钥即刻获取。添加付款方式并验证发送者身份后,即可解锁生产环境。

你的下一个创意。
随时连接。