javascript - 对于实时 Web 应用程序,我有什么比 websockets 更快的替代方法?

标签 javascript browser websocket network-programming

我打算编写一个实时合作多人游戏。目前我正处于研究阶段。我已经编写了一款使用 websockets 的回合制游戏,并且运行良好。

不过,我还没有尝试使用这种技术编写实时游戏。我的问题是关于 websockets 的。是否有另一种方法来处理(浏览器)客户端之间的通信?我的想法是让每个客户端都有游戏状态,并且只将增量发送给使用服务器作为中介/同步工具的客户端。

我主要关心的是网络速度。我希望客户能够尽快收到彼此的 Action ,这样我的游戏就可以保持实时。我每秒大约有 20-30 帧,每帧数据不到 1 KB(这意味着每个客户端每秒最多 20-30 KB 数据)。

我知道“网络速度”之类的东西取决于连接,但我对“如果其他条件都相等”的情况很感兴趣。

最佳答案

在标准浏览器中,webSocket 将是您的最佳选择。仅有的两个选择是 webSocket 和 Ajax。两者都是 TCP 底层,因此一旦建立连接,它们几乎提供相同的传输。但是,webSocket 是一种持久连接,因此每次发送内容时都可以节省连接开销。此外,webSocket 的持久连接允许您直接从服务器发送到您想要的客户端。

在典型的游戏设计中,底层游戏引擎需要适应服务器与任何给定客户端之间的传输速度。如果客户端的连接速度较慢,那么您必须减少发送给可以跟上的东西的数据包数量(在您的情况下可能更少的帧更新)。连接速度就是这样,因此您必须让您的应用以现有的速度提供最佳体验。

您可以做一些其他事情来优化传输的使用:

  1. 一次收集您需要发送的所有数据,并在一次较大的发送操作中发送,而不是通过大量的小发送操作发送。在 webSocket 中,不要发送三个单独的消息,每个消息都有自己的数据。相反,创建一条消息,其中包含来自所有三条消息的信息。

  2. 只要有可能,不要通过发送、等待响应、再次发送、等待响应等方式依赖连接延迟...相反,尝试并行化操作,以便您发送、发送、发送响应,然后在收到响应时对其进行处理。

  3. 调整从您的服务器传出数据包的设置,这样它们就不会出现 Nagle 延迟,等待查看是否有其他数据要进入同一个数据包。参见 Nagle's Algorithm .我认为您无法在浏览器中从客户端对此进行调整。

  4. 确保您的数据尽可能高效地编码以实现最小的数据包大小。

关于javascript - 对于实时 Web 应用程序,我有什么比 websockets 更快的替代方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28684406/

相关文章:

javascript - async/await 代码是否应该完全包含在 try block 中?

html - 每个网页的最大 <iFrame> 标记数

php - Ratchet Websockets over WSS on iis8

javascript - 创建用于 AJAX 的简单 Node.js Web 服务

javascript - 如何动态地将参数传递到 Angular 2中的点击事件方法中

具有方向检测功能的 iPhone 浏览器模拟器

javascript - Websocket中发送二进制文件的进度条

c# - 将 REST Web API 应用程序与 SignalR 集成?

javascript - 有没有办法从 chrome 的存储图像中获取 url?

javascript - 为什么有些人认为 JavaScript 不好?