Skip to main content
传递是最多一次 — 没有重播。在断开连接时已确认的内容不会重新发送,因此生产客户端需要检测缺口并决定是否进行补填。其信号是 context.slot:它界定了断开连接时错过的窗口。本指南涵盖了连接为何关闭、如何干净地重新连接以及如何使用它。

为什么连接会关闭

每次关闭都有一个 WebSocket 关闭代码,告诉您发生了什么以及接下来该怎么做: 服务器每15秒发送一次 ping,因此健康但安静的连接仍然会有流量。如果超过一分钟完全没有看到任何东西——没有通知,没有 ping——假定连接已断开,并重新连接,而不是等待套接字告诉您。

低活跃度过滤器与空闲超时

如果过滤器范围足够窄,确实可能连续 10 分钟都没有匹配项,那么服务器会使用代码 1000 关闭连接。请像处理其他连接关闭一样处理:重新连接、重新订阅,并按下文所述回填缺失的数据。

重新连接并检测数据缺口

1

Reconnect with Backoff

无论连接是否按预期关闭,都应使用指数退避策略重新连接。订阅 ID 在重新连接后不会保留,因此请为之前打开的每个过滤器重新发送 parsedTransactionSubscribe。
2

Track context.slot Across Disconnects

记录断开连接前最后看到的 context.slot。该时隙与你重新连接后看到的第一个时隙之间的区间,就是你缺失的确切窗口——不多也不少。
3

Backfill if You Need To

如果你的应用无法容忍该缺口,请通过 RPC 回填这个时隙窗口:使用 getSignaturesForAddress 列出范围内的交易,然后使用 getTransaction 获取每笔交易。这是一个手动核对步骤——Parsed Streams 本身不会重放数据。
context.slot 是重新连接后仍可用于衔接的数据:记录断开连接前已完整处理的最高时隙,并将其后的所有内容视为回填窗口。

处理 JSON-RPC 错误

失败的请求会返回 JSON-RPC 错误而不是结果,因此你可以根据 error.code 进行分支处理: -32602 和 -32000 表示请求本身有误——请修正过滤器,不要按原样重试。-32001 和 -32002 属于暂时性错误;请使用与重新连接相同的退避策略重试。

后续步骤

Quickstart

完整的协议参考:方法、过滤器字段和限制。

Track Jupiter Swaps

构建一个此连接可以订阅的过滤器。