6

プログラミングを習い始めて一ヶ月。html と css はすでに知っていたので、PHP を学ぶべきだと思いました。チュートリアルや本から多くのことを学びました。今は、練習用に mysql ベースの Web サイトを作成しています。

私は子供の頃、トラビアンのようなブラウザベースの戦略ゲームをいつもプレイしていました。それらのサイトがどのように機能するかを考えていました。ブラウザを閉じた後、ゲームが実際に機能することに気付くまで、何の問題もありませんでした. 例えば; アカウントにログインし、建設を開始してログオフします。しかし、ブラウザを閉じた後でも、ゲームは、その特定の建物のデータを更新する必要があることを「x」時間で認識しています。

誰かがそれがどのように機能するか教えてもらえますか? それは、php、MySQL、またはその他のプログラミング言語を使用したものですか? オンラインで何を検索すればよいか教えていただければ、それで十分です。

4

3 に答える 3

3

PHPはサーバーサイド言語です。誰でもサーバー上の PHP プログラムにアクセスすると、クライアントが誰であるかに関係なく実行されます。

ですから、カウンターを保持するプログラムを想像してください。これをデータベースに格納します。updatecounter.php が呼び出されるたびに、カウンターが 1 ずつ更新されます。

updatecounter.php を参照すると、カウンターが現在 34 になっていることがわかります。

次に updatecounter.php を参照すると、カウンターが 53 であることが示されます。

予想よりも 18 カウント増えました。

これは、updatecounter.php がユーザーの介入なしに実行されたためです。それは他の人によって運営されていました。

updatecounter.php を見ると、次のようなコードが表示されることがあります。

 require_once("my_code.php);
 $counterValue = increment_counter_value();
 echo "New Counter Value = ".$counterValue;

プログラムの主要なコアは、呼び出しているプログラムとは別のプログラムに格納されていることに注意してください。

また、increment_counter_value を呼び出す代わりに、何でも呼び出すことができることに注意してください。したがって、誰かが updatecounter.php を参照するたびに、またはゲームの名前が何であれ、内部のゲーム メカニクスが実行される可能性があります。たとえば、過去 1 時間に実行された場合は呼び出されるたびにチェックし、実行されていない場合はすべての統計を実行する 1 時間ごとの統計管理ルーチンを作成できます。

では、誰もあなたのゲームをプレイしていない場合はどうでしょうか? その場合、時間ごとの統計管理が呼び出されず、ゲームの世界が死んでしまいます。したがって、統計を実行することだけが機能する別のプログラムを作成する必要があります。次に、そのプログラムをサーバー上で 1 時間間隔で実行するようにスケジュールします。これは、 CRONジョブと呼ばれるものを使用して行います。Apache を使用している場合、ホストには既にこの機能が組み込まれていることがわかるでしょう。タスクのスケジューリングについてこれ以上詳しく説明することはありません。環境を知らなければ正しい答えを出すことは不可能だからです。ただし、基本的には、PHP プログラムをサーバー上で実行して時間単位のメンテナンスを実行するようにスケジュールする必要があります。

CRON ジョブのチュートリアルは次のとおりです。

http://net.tutsplus.com/tutorials/other/scheduling-tasks-with-cron-jobs/

私自身は使用していませんが、tutsplus の他のものには問題がなかったので、問題ないはずです。

于 2013-08-02T07:39:48.543 に答える
1

これは php だけではありません。ブラウザベースのゲームは php/mysql/javascript/html の組み合わせです。この種の作業には多くのテクノロジーが使用されています。ブラウザで何かをしているとき、たとえば建物を追加すると、サーバーに ajax リクエストが送信されるため、サーバーはデータベースを更新します (ログアウトするまで待つことはできません。ログアウトすると、他のユーザーはあなたのプレイ状況を知ることができなくなります (多人数の場合)。

于 2013-08-02T07:28:20.287 に答える