【问题标题】:Making real time socket.io Pong game faster使实时 socket.io Pong 游戏更快
【发布时间】:2016-03-23 04:57:56
【问题描述】:

我刚刚使用 node.js 和 socket.io 实现了 Pong 游戏,后端使用 jQuery,客户端使用 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');
});

有没有人有任何减少我的游戏延迟的技巧,或者我的免费套餐对于这种网络应用来说带宽太低了?

【问题讨论】:

  • 你住在哪个aws区域?您的服务托管在哪个区域?你的对手住在哪个aws区域?这可能会导致您遇到延迟。
  • 美国西海岸。但是,即使我在我的本地主机上使用另一台通过 wifi 连接的计算机尝试这个游戏,它也很滞后

标签: node.js socket.io real-time pong


【解决方案1】:

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

相反,我建议您查看有关在线游戏开发的this 博客。当我开始开发多人游戏时,我自己使用了其中描述的想法。它解释了开发在线游戏时的几个关键问题和解决方案。

【讨论】:

  • 是的,我认为它在我的实现中有所体现,因为当我通过本地主机运行它并通过 wifi 与另一台计算机连接时,它仍然滞后。
  • 正如我之前链接的博客/文章中提到的,您可能希望添加某种客户端预测以不依赖于服务器延迟。
  • 嗯,这听起来很复杂,但我会试一试!
猜你喜欢
  • 2021-03-20
  • 1970-01-01
  • 1970-01-01
  • 2013-05-22
  • 1970-01-01
  • 2018-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多