0

私はブラウザベースのゲームを書いています。クライアントは jQuery で、サーバーは PHP/MySQL です。

ターン制のゲームなので、ほとんどのクライアント/サーバー通信は呼び出し応答 (jQuery-PHP) によって実現されます。その呼び出しは、ユーザーがボタンまたはその他のアクティブな要素をクリックするたびに発生します。JQuery で呼び出した後、PHP コントローラーはいくつかのクラスを作成し、データベースに接続して応答を返します。その通信は私にとっては非常に良好であり、接続数などの問題は発生しません (Web サイト使用中の標準的なトラフィックに似ています)。

残念ながら、サーバー側からの「呼び出し」も必要です。例は、参加するアクティブなゲームのリストです。ゲームリストが変更されたときはいつでも、クライアントに通知する必要があります。そして、その最大遅延は 1 秒以下です。

今のところ、クライアント (jQuery) から 'ping' 呼び出しを送信し、ほとんどの場合 "何もない" または "game2 が作成されました" などのサーバー応答を送信することで作成します。しかし、その 'ping' は各プレイヤーから毎秒送信されます。そして、それらのそれぞれに対して、サーバーはクラスを作成し、mysql に接続します。その結果、「データベース接続エラー」が発生します。

mysql 接続や ajax 呼び出しを最小限に抑える方法はありますか? 標準の www サーバーを使用しており、root アカウントを持っていません。

4

2 に答える 2

1

これから始めます:

But that 'pings' will be send every second from each of the players

両方のプレイヤーがサーバーを呼び出す代わりにevery second(実際には 2 つの呼び出しであり、接続されているプレイヤーごとに数が増えます)、idle timeまたは の経過時間を確認することで最適化できdoing nothingます。2 つの連続した呼び出しに対して何も返されない場合は、呼び出しの遅延を2 秒に増やしてから4 秒に増やす必要があります ( setIntervalで遊んで、継続的に実行するだけです)。これにより、アプリにを吹き込むことができます(私はこれを使用して独自のゲームを持っていました)

次に行うことは、呼び出しポリシーです。プレーヤーのコマンドでサーバーを呼び出す代わりに、プレーヤーのコマンドを js 配列に格納し、X 秒ごとにその配列を送信することができます。コマンドがない場合、ajax 呼び出しはありません。はい、遅延が発生しますが、多くのユーザーが貧弱なサーバーに接続していると考えてください...

物事をさらに進めたい場合は、コメット テクノロジーを使用することもできます。

于 2012-06-05T11:29:59.603 に答える
0

これはeggyalが述べたように重複の可能性があると言った..

ping と応答について (クライアント ping サーバー シナリオ)

1) 一時ファイル (すなわち、キャッシュ時間 X で Smarty コンパイルされたファイル) の書き込みを検討しましたか? プレイヤー Y が順番を終えたら、ファイルを削除します (またはそのファイルに何かを書き込みます)。

各プレイヤーは、そのコンパイルされたファイルの存在を確認する game_id (または一意のもの) を使用して AJAX 要求を行います。これにより、多くの mysql 呼び出しを節約できます。ファイルのキャッシュ時間が切れた場合は、mysql を呼び出します。

2)醜い - > mysqlの永続的な接続が役立つかどうか試してください(よくわかりません)

于 2012-06-05T11:29:38.747 に答える