作为浏览器端无服务器架构的实验阶段,我 recently 使用了 WebRTC(仅使用DataChannels,没有后端)开发了一款小型多人水上游boat(battleship)手游。 在开发过程中遇到了几个有趣的挑战:

  • NAT 窗口穿越一致性问题(在不同网络时的不同行为)
  • 没有信令服务器的情况下处理重新连接
  • 保持在纯 P2P 设置下的游戏状态一致性
  • 处理 relayed 和直接连接的延迟差异

令我惊讶的事实是,无论是没有持久性的信令层下的重新连接逻辑如何脆弱:最终我只能使用一个轻量级的外部通道来进行初始握手。

是否有其他人尝试过类似的方法:

  • 如何在 P2P 应用程序中处理重新连接?
  • 有没有很好的模式来在没有服务器的情况下同步状态?

如果有兴趣,请查看 https://github.com/allanbarcelos/battleship-game