Skip to main content

1) 登录错误

”first message must be login”

发送有效的login作为您的第一帧。

login_failed

  • 缺少/无效的apiKey
  • 没有允许或请求的频道
  • 博彩公司不被允许

too_many_connections (4003)

  • 达到您的密钥组的最大连接数(最大:5)
  • 分片或减少并发连接
  • 联系支持以提高限制

2) 已连接但未收到任何内容

  • 未订阅预期的频道?检查login_ok.channels
  • 过滤器太窄?例如空的sportIds或无效的bookmakers
  • 博彩公司门控过滤器:
    • 如果上游消息没有匹配的博彩公司键,它会被过滤掉

3) 二进制解码问题

使用receiveType: "binary"时:
  • 数据帧:MessagePack
  • 控制帧:JSON
您必须解码两者。

3b) zstd解码问题

使用receiveType: "zstd""zstd-dict"时(参见压缩):
  • 解压失败/输出乱码 —— 在"zstd-dict"模式下您没有使用正确的字典解压。从每个二进制帧读取dictId并使用匹配的字典;dictId = 0表示无字典。在"zstd"模式下每一帧都是无字典的——直接解压即可。
  • 帧看起来是纯JSON而不是zstd —— 网关对您做了降级。检查login_ok.receiveType:如果是"json",说明该网关尚未启用zstd(正在逐步发布),您必须按文本JSON解码。
  • 缺少字典(仅"zstd-dict")—— dict控制帧在login_ok之后、数据帧之前到达。在处理二进制帧之前按dictId存储它们。每次连接都会重新发送,无需预先缓存。

4) 恢复期间的snapshot_required

意味着服务器无法安全重放。可能的原因:
  • server_restarted
  • resume_window_exceeded
  • client_backpressure
如果您的lastSeenId太旧,即使短暂的断开连接也可能超过缓冲区。
恢复:
  • 通过REST重新获取快照
  • 重置您的lastSeenId
  • 继续流式传输

5) 负载下断开连接(背压)

症状:
  • 关闭代码4002
  • 跳过的odds更新
修复:
  • 使用receiveType: "zstd"(或"zstd-dict")—— 线路上更小的帧意味着更小的背压
  • 将解析推送到异步队列
  • sportIdsbookmakers过滤

6) entryId中的间隙

entryId是一个游标——不是交付账本。预期存在间隙,原因包括:
  • 上游跳过
  • 网关合并
  • 未重放的重新连接

7) 服务器要求您重新连接

您收到一个控制帧:
这在发布或节点重新平衡期间是正常的——不是错误。
  • 收到此消息后立即重新连接;不要等待套接字关闭。
  • 预期下次恢复时会收到原因为server_restartedsnapshot_required(新副本 = 新的serverEpoch)。通过REST重新获取快照并继续。
  • 参见恢复和重放

8) 关闭代码说明

4000范围的代码由网关主动发送,并始终附带原因字符串。其他代码均来自传输层或您自己的客户端库。

1011 / 1006 —— 瞬时的基础设施关闭

网关从不发送这些代码。它们出现在您与网关之间的连接被中断时——最常见于发布或节点重启期间,紧随§7的reconnect控制帧之后(在staging环境上会更频繁,因为它部署频繁)。
  • 将两者都视为瞬时问题:使用短暂退避重新连接并重新订阅。
  • 主动处理§7的reconnect帧,通常在关闭到来之前您就已经完成切换。
  • 持续的1011/1006循环(每次重连都失败)则是另一类问题——请先检查您的网络路径,然后联系支持。

1009 —— 帧对您的客户端来说太大

网关不限制出站帧大小;未压缩的odds帧可能超过1 MiB。请提高您的库的限制(例如python-websockets中的max_size),或切换到receiveType: "zstd" / "zstd-dict"——压缩后的帧大小只是原来的几分之一。