针对足球及综合体育滚球(In-Play)场景打造的全双工实时数据流通道。通过全球分布式边缘节点与专线直连,将赛场事件、亚盘欧赔水位跳动、危险进攻锁盘信号在 35ms–50ms 内同步至您的业务终端,彻底消除传统轮询带来的滞后与废单风险。
{"op":"odds_delta","mid":8492014,"seq":9940218,"ts":1741529842108, "mkt":{"id":101,"line":"-0.25","st":1,"h":1.94,"a":1.96}}
在滚球赔率计算与前端展示中,仅获取水位数值远远不够。即时赔率API将比赛阶段状态机(Match Phase State)、毫秒级伤停补时时钟与核心赛况事件(比分、红黄牌、角球、VAR介入)同帧绑定下发,确保盘口基准分与赛场真实进程严格一致。
match.state.v3
{
"event_type": "MATCH_PHASE_TRANSITION",
"match_id": 8492014,
"server_ts": 1741526400012,
"state": {
"prev_phase": 10,
"curr_phase": 11,
"phase_label": "FIRST_HALF",
"in_play_active": true,
"prematch_markets_settled": false,
"clock": { "running": true, "elapsed_sec": 1, "added_min": 0 },
"score": { "regular": [0, 0], "corners": [0, 0], "red_cards": [0, 0] }
}
}
{
"event_type": "CLOCK_AND_SCORE_SYNC",
"match_id": 8492014,
"server_ts": 1741529842100,
"state": {
"curr_phase": 13,
"phase_label": "SECOND_HALF",
"in_play_active": true,
"clock": { "running": true, "elapsed_sec": 4062, "display": "67:42", "added_min": 4 },
"score": {
"regular": [2, 1],
"ht": [1, 1],
"corners": [7, 5],
"yellow_cards": [2, 3],
"red_cards": [0, 0]
},
"possession_team": "HOME",
"danger_zone_level": 1
}
}
{
"event_type": "REFEREE_VAR_INTERRUPT",
"match_id": 8492014,
"server_ts": 1741530110450,
"state": {
"curr_phase": 13,
"var_in_progress": true,
"var_reason": "POSSIBLE_PENALTY_HOME",
"global_bet_stop": true,
"clock": { "running": false, "elapsed_sec": 4330, "display": "72:10" },
"rollback_safe_seq": 9940180
}
}
{
"event_type": "EXTRA_TIME_INITIALIZED",
"match_id": 8492014,
"server_ts": 1741532400890,
"state": {
"curr_phase": 15,
"phase_label": "EXTRA_TIME_FIRST_HALF",
"period_scope": "ET_ONLY",
"clock": { "running": true, "elapsed_sec": 5412, "display": "90:12" },
"score": {
"regular_ft": [2, 2],
"extra_time": [0, 0]
}
}
}
全部数据包携带 64位 UTC 毫秒时间戳 server_ts,支持客户端精准计算网络单向传输耗时。
滚球亚盘每次变盘均附带当前基准比分 base_score,杜绝进球瞬间旧比分注单穿透。
若乌龙球改判或越位吹掉,系统自动推送带有修正版本号的 SCORE_CORRECTION 事件。
滚球交易的核心风控在于“先锁盘、后变赔”。当球权进入前场30米危险区域、主裁判鸣哨判罚任意球/角球、或出现单刀突破时,锐矩即时赔率API通过高优先级控制帧(Control Frame)优先下发锁盘指令,耗时控制在 15ms 以内。
BET_STOP_ALL):点球、红牌、进球核验、VAR回看时触发,瞬间冻结该场比赛下属全部主盘与特殊盘口。
BET_STOP_CORNER / CARD):当底线球权发生争抢时仅挂起“角球大小/下一角球”盘口,让球与胜平负主盘继续正常受注。
MARKET_SUSPENDED):操盘手调整某一特定附加盘口(如第3粒进球时间)水位时的局部毫秒级锁定。
球探采集端与计算机视觉系统捕获前场高危渗透,立即生成最高优先级中断信号,绕过常规赔率聚合队列直接进入边缘分发层。
业务系统收到此帧后,立即将当前比赛注单转入“待确认池(Pending Delay)”或直接拦截秒单,前端UI显示锁盘图标。
锁盘期间水位仍在后台实时更新推送(带锁状态),供接入方风控台提前预览新盘口线。
防守方解围至中场安全区,系统下发 SAFE_POSSESSION 与解锁信号,全盘口恢复正常交易。
| 代码 | 枚举标识 | 影响范围 | 建议注单延时策略 |
|---|---|---|---|
| 201 | DANGER_ATTACK | 全场核心盘 (All Main) | 挂起或进入 3~5秒 危险球观察窗 |
| 202 | POSSIBLE_GOAL_OR_PENALTY | 全场所有盘口 (Global) | 立即拒单 (Hard Reject) 直至比分确认 |
| 205 | DANGER_FREE_KICK | 让球 / 大小球 / 下一进球 | 冻结主盘,角球/罚牌盘视位置开放 |
| 208 | CORNER_AWARDED | 角球衍生盘 + 进球大小 | 角球盘立即结算重开,主盘短暂挂起 |
| 299 | FEED_HEARTBEAT_LOST | 全场所有盘口 (Global) | 场地信号中断保护,自动触发安全锁盘 |
在周末欧洲五大联赛并发高峰期,同时进行的滚球赛事超过 350 场。传统 HTTP REST 定时轮询(Polling)不仅产生超过 90% 的无效空查询带宽浪费,更会因轮询间隔盲区导致严重的“慢盘被狙击”问题。
节省超过 93.8% 跨境专线流量与 JSON 反序列化 CPU 开销。
消除高达 1秒 以上的轮询空窗期,彻底阻断自动化套利脚本打时间差。
100% 推送均为真实盘口异动或赛况更新,无任何 HTTP Header 握手冗余。
| 技术指标维度 | WebSocket 实时流 (wss://stream) · 推荐 | REST 快照接口 (https://api) · 辅助补全 |
|---|---|---|
| 连接复用与传输层协议 | 单条 TLS 1.3 长连接多路订阅,支持 Binary Zstd 压缩帧 | HTTP/2 Keep-Alive 短轮询,每次请求携带完整 Header |
| 数据下发粒度 | 字段级增量更新 (Delta Update),仅推送变化的水位与状态 | 全量盘口快照 (Full Snapshot),包含大量未变动静态字段 |
| 危险球锁盘 (BetStop) 时效 | 服务端主动优先推送,≤ 15ms 触达客户端内存 | 取决于客户端轮询周期,普遍滞后 500ms ~ 2000ms |
| 断线重连与状态追平 | 支持传入 last_seq 自动回放最近 60秒 增量队列 |
无状态拉取,适合初始化建库或冷启动全量对齐 |
| 标准工程架构角色 | 承担 99% 滚球实时水位的毫秒级同步与风控锁盘触发 | 承担系统冷启动拉取 Snapshot 基准及极端丢包后的状态校准 |
一场焦点足球滚球赛事通常开放 180+ 个细分玩法盘口。若每次单个水位跳动(如主胜从 1.92 变为 1.90)都下发完整的 45KB 赛事 JSON,任何客户端网卡与解析线程都会瞬间阻塞。锐矩采用“基准快照 (Snapshot) + 严格单调递增差分流 (Monotonic Delta Stream)”架构。
{
"op": "match_snapshot",
"match_id": 8492014,
"seq": 9940217,
"server_ts": 1741529840000,
"league": { "id": 39, "name": "英格兰超级联赛" },
"teams": { "home": "阿森纳", "away": "利物浦" },
"markets": [
{
"market_id": 101,
"type": "ASIAN_HANDICAP",
"period": "FULL_TIME",
"lines": [
{
"line_id": "101_m025",
"hdp": "-0.25",
"base_score": "2-1",
"status": 1,
"outcomes": {
"home": { "odds": 1.92, "hk": 0.92 },
"away": { "odds": 1.98, "hk": 0.98 }
}
}
// ... 其余 180+ 个滚球盘口线初始化数据
]
}
]
}
seq: 9940217 至本地内存缓存(Redis / In-Memory Map)。
仅当收到 new_seq == local_seq + 1 时直接合并内存树
{
"op": "odds_delta",
"mid": 8492014,
"seq": 9940218,
"prev_seq": 9940217,
"ts": 1741529842108,
"d": [
{
"lid": "101_m025",
"st": 1,
"h": 1.94,
"a": 1.96
}
]
}
101_m025) 与最新主客水位,客户端零拷贝直接覆盖对应节点。
应对跨国公网抖动或负载均衡切换,确保本地盘口树 100% 最终一致,绝不残留脏盘口。
每场比赛维护独立的 64位严格递增序号 seq。客户端每次接收增量帧均比对 frame.prev_seq == local.seq。
若检测到跳号且缺失帧数 ≤ 200 帧,客户端直接通过当前连接发送 {"op":"replay","from_seq":9940218},边缘网关在 10ms 内补齐缺失差分包。
若断线超过 60 秒导致滑窗过期,系统立即先触发本地保护性挂起,随后拉取最新全量 match_snapshot 重建基准状态。
在下方交互沙盒中切换订阅赛场、模拟赛场突发高危事件(如危险进攻锁盘、进球变盘),实时观察 WebSocket 报文结构与盘口状态机的联动响应。
mid=8492014
conn, _, err := websocket.DefaultDialer.Dial("wss://stream.odds-api.com.cn/v3/inplay?token="+jwtToken, nil)
// 订阅指定赛事增量赔率流与危险球锁盘信号
subMsg := map[string]interface{}{
"op": "subscribe",
"channels": []string{"odds.delta", "match.bet_stop", "match.state"},
"match_ids": []int{8492014, 8492019},
"compression": "zstd",
}
_ = conn.WriteJSON(subMsg)
async with websockets.connect("wss://stream.odds-api.com.cn/v3/inplay", extra_headers={"Authorization": f"Bearer {token}"}) as ws:
await ws.send(json.dumps({
"op": "subscribe",
"channels": ["odds.delta", "match.bet_stop", "match.state"],
"match_ids": [8492014],
"last_seq": local_cache.get_seq(8492014) # 断线无缝追平
}))
async for raw_frame in ws:
handle_delta_frame(json.loads(raw_frame))
const ws = new WebSocket('wss://stream.odds-api.com.cn/v3/inplay', {
headers: { 'X-API-Key': process.env.ODDS_API_KEY }
});
ws.on('open', () => {
ws.send(JSON.stringify({
op: 'subscribe',
channels: ['odds.delta', 'match.bet_stop'],
match_ids: [8492014]
}));
});
提供全天候回放沙盒环境(Replay Sandbox),支持随时使用历史欧冠/英超焦点战完整滚球流进行压测与锁盘逻辑验证。技术支持邮箱:dev-support@odds-api.com.cn(专线电话:+86-755-86729310)。