5

私は、jQueryを使用してサーバーのゲーム状態をポーリングするマルチプレイヤーHTML5ゲームに取り組んでいます。現在、リアルタイムの更新の印象を与えるために、2000ミリ秒ごとに.ajax呼び出しでサーバーにクエリを実行しています。私は実際にはあまり多くのデータをプッシュしていません...主にx/yの位置といくつかのキャラクター属性だけです...私のゲームインスタンスで生きているのは、ほんの数人のプレーヤーだけです。

サーバー自体は共有ホスティングサーバーであり、このゲームを開発するときは、CPUヒットをできるだけ低く抑えるように努めたいと思います(将来的にはもう少し強力なものに移動します)。

これが、サーバーをポーリングしてデータを取得する現在の方法です。サーバーのロードは私にとって一種の新しい領域であるため、あらゆる提案を歓迎します。

$.ajax({
  type:'GET',
  url:"controller.php?a=player-info",
  dataType:'json',
  success: function(data){
    //parse data
  }
});
....
setInterval(getPlayerInfo,2000);

私が言及しなければならないことの1つは、これは共有サーバー上にあるため、接続を開くためのフリーランニングプロセス(つまりNode.js)を持つことができないということです。

4

2 に答える 2

3

まず、あなたはあまり多くのデータをプッシュしていないと言っています。私にとって、あなたは引っ張っています。これはあなたが知っているかもしれないこととまったく同じではありません。

Websocket、ロングポーリング、またはサーバー送信イベントを使用できます。(この記事を読む

于 2012-11-15T20:41:58.547 に答える
1

これまでの説明から、CPUがボトルネックになるかどうかは明らかではありませんが、サーバーリソースの節約に役立つ可能性のあるいくつかの提案を以下に示します。

AJAXポーリングの代わりにWebSocketを使用することを検討してください。これにより、よりプッシュ指向のアーキテクチャに移行することで、無意味な「何も変更されていない」リクエストを処理するオーバーヘッドの多くを排除できます。

また、DBのボトルネックを回避するために、 memcachedまたはその他のRAMベースのデータストレージレイヤー(Redisなど)を使用することもできます。

于 2012-11-15T20:37:24.787 に答える