从一个确定可用的订阅开始
slotSubscribe 每个槽都会触发,大约每秒五次,因此几乎可以立即看出连接本身是否正常。使用 npm install -g wscat 安装 wscat,然后:
连接被拒绝
身份验证发生在 WebSocket 握手阶段。验证失败时,服务器不会切换协议,而是用普通的 HTTP 错误和 JSON 响应体回应升级请求。许多 WebSocket 库只会报告 “unexpected server response: 403” 并丢弃响应体,因此请用 curl 检查握手,查看真正的原因:HTTP/1.1 101 Switching Protocols 表示身份验证已通过。否则:
其他需要检查的事项:
- 主机能否解析。 WebSocket 运行在 RPC 主机上:
wss://{region}.rpc.orbitflare.com。不存在wss://mainnet.rpc...或wss://global.rpc...这样的主机。完整列表请参阅全球基础设施。 - URL 是否使用
wss://。 将https://URL 传给 WebSocket 客户端会在请求到达 OrbitFlare 之前就失败。 - 仅限 TypeScript:
Cannot find package 'ws'表示缺少可选的 peer 依赖。请运行npm install ws。
已连接但收不到更新
服务器会为每个订阅返回一个数字 ID 作为确认。如果始终没有收到 ID,说明请求被拒绝了,回复中会说明原因:- 账户没有变化。
accountSubscribe只在账户的数据或 lamports 发生变化时触发。请用一个确定很活跃的账户测试,例如每个槽都会变化的SysvarC1ock11111111111111111111111111111111。 - 过滤条件没有匹配到任何内容。 对于
programSubscribe和logsSubscribe,如果某个地址从未出现在任何交易中,就不会产生事件。请先在区块浏览器上检查该地址。 - 签名太旧。
signatureSubscribe只知道最近的交易。对于几分钟以前的交易,请改用带searchTransactionHistory: true的getSignatureStatuses。参见等待交易确认。
连接断开
空闲连接会在没有任何提示的情况下关闭
没有流量的连接最终会被断开,而且是被直接切断而不是通过关闭帧关闭,因此您的客户端会看到关闭码1006,原因为空。请每 20 到 30 秒发送一次 WebSocket ping 帧以保持连接:
重新连接后订阅消失
订阅属于某个连接。连接断开时,订阅也随之消失,新连接开始时没有任何订阅。请记录您订阅过的内容,并在重新连接后再次发送这些请求。注意订阅 ID 会发生变化。 SDK 会跟踪订阅并自动重新订阅。您的sub.next() 循环在重连期间会继续运行。
取消订阅失败
Invalid subscription id. 表示该 ID 在此连接上不存在。通常是连接已被替换,而该 ID 属于旧连接。可以放心忽略。