大家好,

我正在开发Chat vs World,一个实时的Twitch流媒体覆盖式多人在线角色扮演游戏。为了分享一些帮助我在直播环境中维持性能和参与度的架构决策,希望能帮助其他开发浏览器基于多人在线游戏的开发者。

1. 减少垃圾收集抖动

  • 为确保在OBS浏览器源中提供平滑的视觉体验,我必须对HTML5画布进行大量优化。
  • 我在60 FPS的requestAnimationFrame内部实现了一个零分配渲染循环,消除了垃圾收集(GC)微抖动。

2. 保持带宽成本低

  • 为防止聊天变得混乱时服务器瘫痪,我建立了一个自定义的两阶段MMO网络协议。
  • 对于常规的游戏tick,系统仅保留动态delta。
  • 游戏成功地维持了低于10 KB/s的带宽成本,超过100个静止的闲置聊天者。

3. 修复无限AFK漏洞

  • 由于玩家使用聊天命令来玩,理论上他们可以在战斗中无限AFK。
  • 我通过使用基于位置的状态来修复这个问题:战斗中或世界BOSS战斗中没有被动治疗。
  • 玩家必须通过命令如!idle在镇区快速恢复健康。

我很高兴回答关于WebSocket设置、Node.js后端或Canvas渲染的任何问题。

(如果你想看渲染如何处理实时负载,我目前正在我的流媒体中运行它:https://www.twitch.tv/scriptkidandy 玩家们可以看到一个小绿色植物在技能区与玩家们当前正在砍柴的地方非常好地融合在一起,早期测试者将获得一个永久的特殊植物徽章!)