WebRTC 是一项强大的技术,可以创建高质量的实时应用程序。这些能力超越了传统的视频会议,适用于包括视频游戏在内的多个行业。今天,我们将讨论使用 WebRTC 创建基于 Web 的多人视频游戏背后的概念。
为什么基于 Web?
基于 Web 或浏览器的游戏是传统独立游戏的流行替代品。它的主要优点是用户不需要安装任何东西。他们只是去游戏的网站,也许验证,然后繁荣!您的游戏已准备好传播。
虽然安装游戏不会阻止有经验的游戏玩家,但更多休闲玩家在经历某些游戏客户端需要的数百 GB 下载之前可能会三思而后行。基于网络的游戏最适合这些类型的用户
另一个重要的好处是基于网络的游戏几乎可以在任何地方运行。您只需要一个受支持的浏览器。
为什么选择 WebRTC?
在多人视频游戏中,您有多个客户端连接到一个服务器。除其他事项外,该服务器负责同步玩家之间的游戏状态。此类信息需要以低延迟传输,以便每个玩家都能够做出相应的响应,即躲避攻击或在最后一秒赢得比赛。
一种方法是使用Websockets。WebSocket API 使得在用户浏览器和服务器之间打开双向交互通信会话成为可能。客户端和服务器之间的这种双向连接允许它们可靠地交换有序数据。
Websockets 适用于用户不需要实时反应的聊天或回合制游戏。但它不适合对时间高度敏感的游戏,例如如今非常流行的第一人称射击游戏或大逃杀。
这样做的原因是 Websockets 在传输控制协议 (TCP) 之上工作。该传输协议不仅准备和发送数据,而且还控制交付、重新传输任何丢失的数据包并保证其顺序。如果没有适当的优化,这会引入延迟。
用户数据报协议 (UDP) 提供了一种更合适的方法,因为它不执行此类控制。相反,UDP 让应用程序或更高级别的协议处理它。在实时连接方面,这提供了我们用例所需的低延迟传输。(有关 TCP 和 UDP 的更多信息可以在我的另一篇博文 WebRTC 的网络基础知识:传输和地址 中找到。)
WebRTC 提供了一种在浏览器中通过类似 UDP 的传输协议发送数据的便捷方式,同时在需要时支持一些 TCP 功能。这种机制就是DataChannel API。
客户端-服务器与点对点
在深入了解使用 WebRTC 构建多人游戏的细节之前,让我们花点时间谈谈它的架构。
WebRTC 的卖点之一是它的点对点性质。您可以在没有中间服务器的情况下直接在两个对等点之间建立连接。在视频游戏的背景下,这意味着让玩家“主持”他们自己的游戏并让其他玩家直接加入而不涉及任何外部服务器。
尽管不必担心服务器听起来很有吸引力,但有几件事需要考虑:
- 即使对等点之间的连接确实是无服务器的,也需要在实际连接之前进行信号处理。这个过程让对等点首先知道如何相互连接。正如您已经知道的那样,它需要托管在服务器上。
- 在理想情况下,每个对等点都有自己的公共 IP 地址,可用于访问它。实际上,一个或两个极有可能位于 NAT 设备之后。需要一种遍历它的机制。
WebRTC 通过 ICE 协议提供了这样一种机制,该协议依赖于额外的服务器——即 STUN 和 TURN——来找到到达对等点的最佳路由,包括 NAT 遍历。
此外,随着参与者数量的增加,每个玩家都必须保持额外的连接。最终,他们的设备将无法处理该负载。
最后但同样重要的因素是,玩家有责任在点对点架构中保持他们的游戏状态同步。根据其实施方式,它可能会给一个玩家带来相对于其他玩家的不公平优势。更不用说如果没有适当的验证机制,游戏状态可能会被篡改以支持特定玩家。
作为奖励,您无论如何都希望有一个服务器来处理身份验证和/或与其他第三方服务的集成。在客户端级别使用它可能是一个安全问题。
话虽如此,虽然使用 WebRTC 可以实现点对点架构,但您仍然需要服务器。客户端-服务器架构加上通过 WebRTC 的 DataChannel API 以低延迟发送数据的能力是最好的方法。
让我们开始吧
涵盖了重要概念后,是时候列出创建多人游戏时要牢记的事项了。
1. 设置您的基础设施
这需要配置支持连接的信令和 ICE 服务器。如果您正在编写自己的游戏服务器,您还需要考虑在那里捆绑信号以利用相同的基础设施。
对于 ICE 服务器,您可以依赖众所周知的开源选项,如Coturn。或者,将该责任移交给 Xirsys等第三方服务提供商。支付月费后,他们将为您准备好为您的游戏使用 STUN 和 TURN 服务器。
2. 配置你的游戏服务器
您的游戏服务器负责管理玩家并保持游戏状态同步。您可以选择自己编写还是依赖开源媒体服务器。
对于第一种情况,您可以完全控制服务器的行为方式。但您还负责添加 WebRTC 核心功能。为此,您需要克隆 upstream implementation,或者探索第三方实现,例如Pion。
或者,开源媒体服务器提供了一个随时可用的服务器,可以轻松集成到您的游戏客户端中。这是以必须依赖客户端代码或什至额外的应用程序服务器来使其按您想要的方式运行为代价的。
3. 编写你的游戏
准备好所有支持部件后,最后也是最重要的一步就是实际编写游戏代码。在纯 HTML、CSS 和 JavaScript 上编写代码;使用React等网络框架;甚至利用网络游戏引擎进行更高级的游戏开发。发挥你的创造力,让实时通讯部分站在巨人的肩膀上。
编译自webrtcventures,作者:Hector Zelaya
本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/webrtc/10561.html