您好我通过使用socket.io和node.js制作游戏来学习javascript。我会问你应该如何运作。现在玩家,玩家的子弹和其他东西的所有位置都存储在服务器上,服务器将其发送给客户端。客户端获取数据时在屏幕上绘制所有内容那一切都好吗?当我在free node.js服务器上部署server.js文件时,我得到了滞后但是当我在我的PC上运行它时,我没有得到它。这个服务器有故障吗?
我可以将链接粘贴到存储库,如果它有帮助并感谢您的帮助。
答案 0 :(得分:2)
确保部署的服务器允许websocket连接。如果socket.io无法使用websocket,它将通过http切换到长轮询。这可能会导致您遇到的滞后。
您也可以通过检查网络流量并查看是否通过websocket或http发送数据包,在浏览器Web控制台中进行检查。
答案 1 :(得分:0)
我在存储库中查看您的代码,这有点天真。我的主要建议是:
1) 不要经常发送更新的数据。 您正在尝试每33毫秒发送一次客户端数据,但即使对于原生游戏也是如此。每秒发送数据,用于同步世界状态,并在客户端上进行外推(只是视觉上的部分,而不是内部逻辑......例如模拟子弹飞行和碰撞,但不破坏对象,它是服务器作业)。
2) 仅发送新数据。 尝试仅发送差异。这是非常棘手和艰难的,但值得工作。你可以将它与p结合起来。 1,例如,每5秒发送一次内部状态,每隔0.5秒发送一次具有先前状态的差异。
3) 仅发送事件。 如果子弹飞行50帧直接比他们不需要发送50个位置。只需发送“Bullet #uniqid从XY以速度+1,0开始飞行”,然后发送“Bullet #uniqid在X,Y和被破坏的对象[ID列表]中爆炸”
抱歉我的英语不好,希望你理解我的建议。