Javascript游戏与 socket.io.服务器滞后



你好,我正在通过用 socket.io 和node.js玩游戏来学习javascript。我会问你它应该如何工作。现在玩家的所有位置,玩家的子弹和其他东西都存储在服务器上,服务器将其发送到客户端。客户端在获取数据时会在屏幕上绘制所有内容。一切都好吗?当我在空闲节点.js服务器上部署服务器.js文件时,我遇到了滞后,但是当我在PC上运行它时,我没有得到它。这是服务器故障吗?

如果有帮助,我可以将链接粘贴到存储库,并感谢您的帮助。

确保您部署到的服务器允许 websocket 连接。 如果无法使用 websocket,socket.io 将通过 http 切换到长轮询。这可能会导致您遇到的滞后。

您还可以在浏览器 Web 控制台中通过检查网络流量来检查这一点,并查看数据包是通过 websocket 还是 http 发送的。

我在存储库中查看您的代码,这有点幼稚。我的主要建议:

1(不要经常发送更新的数据。您尝试每 33 毫秒发送一次客户端数据,但即使对于本机游戏,它也有点繁重。每秒发送一次数据,用于同步世界状态,并在客户端上推断它(只是视觉部分,而不是内部逻辑......例如,模拟子弹飞行和碰撞,但不破坏物体,这是服务器作业(。

2(仅发送新数据。尝试仅发送差异。这是非常棘手和困难的,但值得努力。您可以将其与 p. 1 结合使用,例如,每 5 秒发送内部状态,每 0.5 秒发送与先前状态的差异。

3(仅发送事件。如果子弹飞 50 帧直接比没有必要发送 50 个位置。只需发送"子弹 #uniqid 以速度+1,0从XY开始飞行",然后发送"子弹 #uniqid 在X,Y处爆炸并摧毁物体[id列表]">

对不起,我的英语不好,希望你能理解我的建议。

最新更新