私は、socket.ioを使用してゲームPongのマルチプレーヤーブラウザの実装を行い、リアルタイムのロジスティクスに関する質問をしました。基本的には、プレイヤーのパドルは、押されているボタンに応じて上下に移動する単色のdivです。 AWSを使用して2つの異なるコンピュータでプログラムをテストしたところ、動きはほぼ完全に同期していましたが、正確ではないことがありました。パドルをコントロールするプレイヤーの場合、パドルの移動はローカルで行われますが、サーバーと対戦しているプレイヤーは、相手が上下に移動したかどうかのデータを継続的に送信します。プレーヤー側のサーバー側またはクライアント側?
私の質問は私がすべてのムーブメントサーバー側をしているのですか?ユーザが上を押して、パドルが移動すべきであることを両方のプレーヤに発する要求をサーバに送信するか、またはあなたのパドルの動きが局所的にうまく行われる私の方法ですか?
私のコードは今のようになります。チェック
クライアント側であればアップまたはボタンを押すと発光移動要求ダウン:
paddleMove = 0; // Keep track of which direction to move
speed = 5;
if (paddleL.position().top > arena.position().top){ // If left paddle not at top
if (keysPressed.up) paddleMove -= speed;
}
if (paddleL.position().top+paddleL.height() < arena.position().top + arena.height() - 15){ // If left paddle not at bottom
if (keysPressed.down) paddleMove += speed;
}
paddleL.css({ // Move paddle locally
top: paddleL.cssNumber('top') + paddleMove + 'px'
});
socket.emit("moveReq", paddleMove); // Send to server
上記のコードは、のすべての部分を走る区間であります2番目。今度の警告でユーザー側のコードの別の部分が他のパドルを移動する
socket.on('moveReq', function(data){ // Send to opponent that other paddle moved
socket.broadcast.emit("movePaddle", data);
});
::私が言ったように
socket.on("movePaddle", function(data){
var paddleMove = 0;
paddleMove += data; // Data is speed (direction) of movement
paddleR.css({ // Move right paddle
top: paddleR.cssNumber('top') + paddleMove + 'px'
});
を、動き
は、その後、サーバ側では、このようになります。今はかなり良いですが完璧ではありません。私はその動きをローカルにしてはならないし、サーバー上ですべてを動かすべきでしょうか?
芋あなたは、この場合には、特定の時間にサーバ側でクライアント側との同期の際にボールタッチパドルの動きを行う必要がありますので、あなたは、サーバーが過負荷にしてハッキングを防止するために防ぐことができます。これのために –