棋牌赛事的现场数据服务:一盘棋的比分,是怎么从棋盘传到直播间的
从记分员手写录入到实时棋谱接口,赛事数据服务把一盘安静的对局变成可查询、可直播、可复盘的结构化信息。
一场几百人参加的棋类比赛,观众在手机上看得到每一盘的进程、每一轮的对阵、每一个台次的比分。这些信息不是比赛结束时才出现的,而是在对局进行中就被一点点搬到线上。做这件事的,是一支通常不会出现在镜头里的小团队——赛事数据服务。
数据服务的起点:不是直播,是报名
很多人以为赛事数据是从开赛那一刻才开始的,实际上第一份数据早几周就产生了:报名表。
一份合格的报名表至少要包含姓名、单位或俱乐部、年龄组别、等级分或段位、联系方式、是否需要住宿。这些信息在报名结束的当天就要转成结构化的选手库,因为后续的分组、编排、秩序册、台次表、证书,全部依赖它。
经验做法是:报名阶段就强制要求填写证件号或协会注册号,用唯一 ID 而不是姓名做主键。同名同姓在大型比赛里并不罕见,靠姓名关联数据,迟早会在某个环节把两个人的成绩对调。
一盘棋要被记录成什么
不同类型的项目,需要记录的颗粒度完全不同。
棋类(围棋、象棋、国际象棋)关心的是结果序列:谁执黑或先手、胜负或和棋、用时。围棋还要记录数目或点目结果。国际象棋和部分象棋赛事会要求记录完整着法,这就进入了棋谱的范畴。
桥牌关心的是牌局数据:每一副牌的牌型、定约、庄家、结果、得分,以及每对牌手的比赛分或 IMP。这类数据的采集量远大于棋类,一副牌可能有二十多个字段,一场比赛几百副牌。
麻将、掼蛋这类计分制项目,关心的是逐局分数流:每一局谁和了、番种是什么、分数怎么转移。数据量不大,但时序要求高,顺序错了整场就错。
从棋盘到数据库的三条路
第一条是人工录入。 最常见也最稳妥。对局结束后,由负方或双方到记分台报成绩,记分员录入系统。优点是准确、可核对、不依赖设备;缺点是慢,且高峰时段会排队。大型公开赛的经验是每 40 到 60 名选手配一个录入点,否则第三轮之后必然积压。
第二条是选手自助提交。 通过小程序或二维码,选手自己扫码报分。速度快,但需要校验机制:通常要求双方分别提交,系统比对一致才生效;不一致则转入人工仲裁。这条路的成本转移到了选手身上,在业余赛事里接受度不错,在低龄组赛事里基本不可用。
第三条是设备直采。 电子棋盘、智能牌桌、自动识别系统。围棋和象棋的电子棋盘已经比较成熟,可以实时把着法传到服务器,错误率极低。桥牌有发牌机加读牌设备的方案。麻将和扑克因为牌面信息量大、牌张可隐藏,自动采集仍然困难,多数停留在半自动阶段。
延迟是第一生产力
对观众来说,延迟两分钟和延迟两小时,是两种完全不同的产品。
一个可操作的延迟预算大致是:对局结束到录入,1 到 3 分钟;录入到入库,几秒;入库到前端可见,几秒。也就是说,正常情况下观众看到的比分应该在 5 分钟以内刷新。超过 15 分钟,直播间里的讨论就会开始失真。
为了压延迟,成熟的做法是双通道:正式成绩走严格的双签核通道,同时允许先录入一个待确认状态,前端标记为「暂定」,等双方确认后自动转正。观众看到的是带标记的实时数据,工作人员保留纠错空间。
数据出去之后:直播、裁判与复盘
同一份数据,下游有三类用户。
直播和媒体需要的是稳定的读取接口和推送。常见做法是提供只读 API 加定时轮询,重要赛事再加 WebSocket 推送。接口要限流,否则比赛关键时刻被刷爆是常态。
裁判和编排需要的是可写、可回滚、可审计的系统。编排软件要根据上一轮结果自动算下一轮对阵,任何一个成绩改动都可能引发连锁重排,所以成绩修改必须留痕:谁改的、什么时候改的、改前改后是什么。
选手和教练需要的是复盘数据。赛后把成绩、对手、等级分变化导出成个人档案,是很多赛事方做得不够但选手非常在意的一环。
数据错了谁负责
这是最容易扯皮的部分。
一般的责任划分是:选手提交的结果由选手负责;记分员录入的错误由组委会负责;系统 bug 由技术方负责。但真正麻烦的是错误发现的时点——如果下一轮已经开始编排,改成绩就要重排,影响面迅速扩大。
所以多数赛事会规定一个申诉时限,比如本轮结束后 15 分钟内可以提出成绩异议,超时原则上不再受理,除非涉及名次和奖项。这个时限必须在秩序册里写清楚,并且现场广播。
这门生意的技术门槛
赛事数据服务看起来是软件活,实际上核心能力在两处:一是对规则的理解,不同项目的计分、破同分、等级分算法各不相同,写错了没人当场发现,事后全是纠纷;二是现场的工程能力,网络不稳、电源不足、设备临时增减、工作人员不熟练,这些比代码本身更难对付。
因此这个领域的成熟团队并不多,且高度依赖长期积累的规则库和预案库。对赛事方来说,评估一家数据服务商,与其看演示效果,不如问三个问题:断网了怎么办、成绩录错了怎么回滚、上一个服务过的同项目比赛是哪一场。