BingoLive.online 是一个娱乐项目,从一开始我就给它设定了两个目标:为线上博彩类游戏提供免费的替代体验,同时把它作为技术实验场,用来深入学习 JavaScript、直播、实时 API 与混合架构。
项目的由来
我创建 BingoLive 时,线上赌场类游戏正在法国快速流行,Twitch 直播兴起,参与者数量也不断增加。
我的设想是做出一款即使并不完美、但完全免费的替代产品,让用户无需下注真钱,也能体验其中部分游戏机制。
这个服务从一开始就不允许充值、出售积分或提供可兑换的奖金,目的只是保留开奖、宾果卡与直播互动带来的娱乐体验。
不过,我也清楚,这类服务不能被宣传为戒除赌瘾的方案。真正受到成瘾问题影响的人,仍然需要专业机构的帮助,免费游戏无法替代这种支持。
我的技术目标
启动这个项目时,我的主要技术目标是深入学习 JavaScript,并理解直播平台的运行方式。
当时,目标用户熟悉的主播大多在 Twitch 上直播,因此我也选择在同一平台播出开奖过程。
项目很快超出了一个简单前端网站的范围,需要构建多项能够协同运行的技术组件。
最初的架构
BingoLive 的第一版采用由多个独立组件组成的架构。
前端负责显示宾果卡、最新号码、当局历史与聊天内容。API 向客户端提供当前开奖状态,服务端编排器则负责启动游戏、管理计时器并抽取号码。
游戏主要流程
宾果卡与聊天
游戏状态
计时器与开奖
开奖球动画
Twitch 直播
服务器始终是唯一事实来源,客户端从不自行决定开奖结果,只负责从 API 获取状态并更新界面。
这种职责分离避免了各个浏览器生成不同的游戏状态,并保证所有用户看到同一局结果。
Twitch 直播
在 Twitch 直播链路中,Raspberry Pi 以全屏方式运行开奖引擎,再将画面编码为 H.264 并推送到 Twitch。
来自 Spatiograph 的 Roger Chaudet 负责 UI/UX,以及开奖球等图形素材。他的设计为项目建立了完整而鲜明的视觉识别。
Twitch 承担了视觉呈现与社区互动,但直播平台天然存在延迟,因此视频画面不能作为游戏状态的技术基准。
实时同步
项目中最有意思的难点之一,是协调开奖引擎、Twitch 直播与用户浏览器之间的实时状态。
每抽出一个新号码,编排器都会更新游戏状态;客户端通过 API 获取信息,并立即显示最新号码。
这项界面提示十分关键,因为 Twitch 直播可能延迟数秒。即使视频尚未同步,玩家仍能准确跟进自己的宾果卡。
这个项目让我能够解决分布式系统的几个典型问题:
- 当前状态管理;
- 事件的顺序;
- 游戏过程中客户端重新连接;
- 恢复开奖历史;
- 延迟管理;
- 多个连接的客户端之间的一致性。
宾果卡生成
生成宾果卡也需要真正的算法。我不想只是将随机数放在网格中。
宾果卡必须遵循实际规则:按列分配数字、每行固定数量的已填单元格以及不存在不一致的重复项。
用户在游戏过程中可以收到多张宾果卡。因此,系统必须:
- 生成有效宾果卡;
- 将宾果卡关联到正确的用户;
- 在整局游戏中保存卡片状态;
- 自动核对已开出的号码;
- 检测获胜组合。
整套流程依靠前端、后端与编排器之间的一组 API 协同运行。
登录、聊天与本地化
部分目标用户并不熟悉计算机操作,因此我集成了简化的 Facebook 登录,避免他们再创建一个账户并记忆新的密码。
聊天功能同样重要。宾果本质上是社交游戏;没有玩家互动,整个体验很快就会退化为简单的随机数生成器。
我还实现了国家识别与界面翻译。为了保持体验一致,聊天系统也必须本地化:可以按语言拆分聊天室,也可以采用合适的翻译逻辑。
这部分工作让我实践了国际化、语言区域识别、内容翻译,也看到了自动地理定位的局限。
扩容与负载均衡
在活跃高峰期,BingoLive 吸引了约 1,300 名用户。这个数字不代表 1,300 个并发连接,但已经足以暴露初始架构的瓶颈。
我因此开始优化服务端负载均衡与服务监控,并消除多个单点故障。
这是我最早在真实实时应用中实践负载均衡的项目之一。
Google Analytics 数据还显示,移动端用户占比很高。因此我重新设计了界面,使其真正适配响应式布局,并能在手机上顺畅使用宾果卡。
VPS、本地网络和 OpenVPN
BingoLive 采用混合架构。
前端、API 和编排器托管在我的 Ionos VPS 上。流媒体部分采用 Raspberry Pi 和 H.264 编码,在我的本地网络上运行。
这两套基础设施之间必须保持长期连接,但我不希望在本地网络开放多个端口,也不愿将内部服务直接暴露到互联网。
我部署了 OpenVPN 服务器,在本地基础设施与 VPS 之间建立持久隧道,让各组件能够通过同一个私有网络通信。
这个方案让我实际处理了:
- 网络路由;
- 持久 VPN 隧道;
- VPS 和 LAN 之间的通信;
- 连接中断后的自动恢复;
- 减少公网暴露面。
逐渐变得复杂的架构
项目最初只是为了学习 JavaScript,最终却演变成由前端、后端、API、编排器、VPN、Raspberry Pi、H.264 编码链与 Twitch 直播共同组成的系统。
系统可以正常运行,但每次启动以及发生故障时,都需要投入不少维护工作。
这套架构运行了约六个月,之后我需要把 Raspberry Pi 调配给其他项目。
此后,仅为 BingoLive 重新启动整套基础设施就要花费太多时间,项目因此暂停了一段时间。
借助 Vibe Coding 重启项目
借助 Vibe Coding,我终于有时间重新投入这个项目,并对架构进行现代化改造。
第一个重大变化是停止通过 Twitch 直播。过去由 Raspberry Pi 渲染并推送到 Twitch 的画面,如今直接在用户浏览器中生成。
历史架构
- Raspberry Pi 专用于直播;
- H.264 编码;
- Twitch 直播;
- 管理视频延迟;
- 通往 LAN 的 OpenVPN 隧道。
当前架构
- 在浏览器中呈现的引擎;
- 移除整套直播链路;
- 需要维护的组件更少;
- 直接在客户端同步;
- 简化的架构。
我也借此机会加入了几款小游戏,包括免费二十一点、弹珠机和一款受赌场游戏启发的轮盘游戏。
这些游戏只使用免费的虚拟积分,不支持充值、提现,也不会提供任何具有市场价值的收益。
项目的限制
对于希望体验部分游戏机制、又不愿承担金钱损失风险的人,BingoLive 可以提供一种免费的替代选择。
但这类服务不能被视为医疗方案或戒断手段。随机开奖、动画与积分仍可能复现赌博活动带来的部分刺激感。




评论
0 条评论暂无已发布评论,欢迎率先参与。