对于实时Web应用程序,我有哪些更快的替代方法可用于websockets?

Ada*_*old 4 javascript browser network-programming websocket

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

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

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

我知道像"网络速度"这样的东西取决于连接,但我对"if all else equals"的情况感兴趣.

jfr*_*d00 11

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

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

您可以采取其他一些措施来优化运输的使用:

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

  2. 在可能的情况下,不要通过发送,等待响应,再次发送,等待响应等来依赖连接的延迟...而是尝试并行化操作,以便发送,发送,发送然后处理响应.他们进来了.

  3. 调整来自服务器的传出数据包的设置,这样他们就没有Nagle延迟等待查看是否有其他数据进入同一个数据包.见Nagle的算法.我认为您无法在浏览器中从客户端调整此功能.

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