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
构建一个此连接可以订阅的过滤器。