我打算编写一个实时合作多人游戏。目前,我处于研究阶段。我已经写了一个使用websockets的基于回合的游戏,并且运行良好。
但是,我没有尝试使用这种技术编写实时游戏。我的问题是关于websockets的。有没有其他方法可以处理(浏览器)客户端之间的通信?我的想法是在每个客户端中具有游戏状态,并且仅将服务器用作中介器/同步工具将增量发送给客户端。
我主要关心的是网络速度。我希望客户能够尽快接收彼此的动作,以便我的游戏保持实时。我每秒大约有20-30帧,每帧少于一千字节的数据(这意味着每个客户端每秒最多有20-30千字节的数据)。
我知道诸如“网络速度”之类的东西取决于连接,但是我对“其他条件是否相等”情况感兴趣。
从标准浏览器来看,webSocket将是您最好的选择。仅有的两种选择是webSocket和Ajax。两者都是TCP的内幕,因此一旦建立连接,它们几乎就提供相同的传输。但是,webSocket是一个持久连接,因此您每次想发送东西时都可以节省连接开销。加上webSocket的持久连接,您可以直接从服务器发送到想要的客户端。
在典型的游戏设计中,基础游戏引擎需要适应服务器与任何给定客户端之间的传输速度。如果客户端的连接速度较慢,则您必须将发送的数据包数量减少到可以保持的水平(在这种情况下,可能更新更少的帧)。连接速度就是如此,因此您必须使您的应用以最快的速度提供最佳体验。
您可以做一些其他事情来优化传输的使用:
一次收集所有需要发送的数据,然后以较大的发送操作(而不是大量的小发送)发送。在webSocket中,请勿发送三个单独的消息,每个消息都具有自己的数据。而是创建一条包含所有三条消息中的信息的消息。
只要有可能,就不要通过发送,等待响应,再次发送,等待响应等方式来依赖连接的延迟。相反,请尝试并行化操作,以便按以下方式发送,发送,发送和处理响应:他们进来。
调整来自服务器的传出数据包的设置,这样它们就没有Nagle延迟,可以等待查看同一数据包中是否还有其他数据。请参阅Nagle的算法。我认为您无法在浏览器中从客户端进行调整。
确保以最小的数据包大小对数据进行尽可能高效的编码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句