使实时socket.io Pong游戏更快

我刚刚完成了使用node.js和socket.io作为后端的Pong游戏,用jQuery作为客户端。 我把游戏放在我的免费层AWS实例上,机制工作正常,但延迟是无法玩的。 在游戏中,控制它的玩家的桨在本地移动。 客户端也发送一个服务器请求,每个requestFrameAnimation广播桨板运动到对手。 为了发射球,发球的球员按下发送服务器请求的空格键,然后向两个球员发出球开始运动。

桨运动和球发射都受到延迟的影响。 对于桨我觉得问题是,我发送一个服务器请求每个requestFrameAnimation这可能是一个速度快。 也许我应该设置一个setInterval,每隔一秒钟将玩家的桨位置发送给对手。 至于球,因为它开始移动的信号是由服务器发送的,我想我需要发送一个实际的时间来提前发射空格键,所以每个本地机器可以倒计时到这个时间。

这里是我的客户端代码的一些上下文剪辑:

 function updateFrame(){ paddleSpeed = 0; if (keysPressed.up){ // Move paddle up if (!(myPaddle.offset().top <= arena.offset().top)){ // Make sure paddle isn't at top paddleSpeed -= 8; } } if (keysPressed.down) { // Move paddle down if (!(myPaddle.offset().top+paddleL.height() >= arena.offset().top + arena.height())){ // Make sure paddle isn't at bottom paddleSpeed += 8; } } if (paddleSpeed != 0) socket.emit("moveReq", paddleSpeed); // Send server request to be sent to opponent myPaddle.css({top: '+='+paddleSpeed+'px'}); // Move paddle locally if (gameInProgress){ // If round has started, move the ball ball.css({left: '+='+ballSpeed.hor+'px', top: '+='+ballSpeed.ver+'px'}); window.requestAnimationFrame(updateFrame); // Request next frame 

和我的服务器端:

 socket.on('moveReq', function(data){ socket.broadcast.emit("movePaddle", data); // Send opponent's paddle movement to user }); socket.on('launchGame', function(){ // Launch the game io.sockets.emit('startGame'); }); 

有没有人有任何提示,以减less我的游戏的延迟,或者是我的自由层只是太低带宽这种types的networking应用程序?

应该有足够的带宽来运行这个游戏容易,所以我不认为这是你的问题。

相反,我build议你看看这个博客关于在线游戏开发。 当我开始开发多人游戏时,我使用了自己所描述的想法。 它解释了开发networking游戏时的几个关键问题和解决scheme。

Interesting Posts