0

私はWebゲーム(js php mysql)を開発しています。このゲームでは、ボタンをクリックしてアクションを開始し、完了するまでに時間がかかり(たとえば、10時間)、完了すると、そのプレーヤーの合計にいくつかのポイントが追加されます。問題はアクションの終了時にプレーヤーがオンラインでなくても、これらのポイントを追加する必要があります。たとえば、ランキングを更新したり、プレーヤーにメールを送信したりする必要があります。

cronジョブがアクションの終了を絶えずチェックすることを考えましたが、それはリソースを殺してしまうと思います(何千人ものプレイヤーのアクションを絶えずチェックしています..)。

この問題に対するより良い解決策はありますか?

ご清聴ありがとうございました!!

4

3 に答える 3

5

完了したらデータベースに書き込むことができ、ユーザーがログインすると、獲得したポイントがアカウントに追加されます。cronjob で確認することもできます。何百万人ものユーザーがいる場合でも、サーバーが停止することはありません

于 2012-06-05T21:42:36.257 に答える
0

不正行為から安全になりたい場合は、とにかくサーバーでチェックを行う必要があります。クライアントのJavascript内で「待機」が発生する場合は、残り時間を簡単に減らすことができます。

したがって、ジョブをサーバーに送信する必要があります(これは、クロックの変更に対して安全であると想定されています)。サーバーが終了タイムスタンプを決定します。ジョブをキューに保存できます。

ユーザー自身にこの情報のみが必要な場合は、ユーザーがログインしたときにキューを確認できます。それ以外の場合は、1分ごと(またはそれ以上)にcronジョブを実行します。このジョブは、タイムスタンプが過去のときにすべてのジョブを終了したことを示します(そしてそれらをデータベースから削除します)。

より正確なチェックが必要な場合は、これをより頻繁に実行する代替のサーバー側ソリューションを考え出す必要があります(たとえば、数秒ごとにデータベースをポーリングする単純なプログラム)。

于 2012-06-05T21:48:28.507 に答える
0

Cronはこれに最適です。タスクをストアド プロシージャに記述し、cron で SQL スクリプトを実行して、プレーヤーのレコードを更新するストアド プロシージャを呼び出すことができます。

データベースは、何千、何百万もの情報を効率的に処理するように設計されているため、ホストしているシステムがすでに実際に制約されていない限り、システム リソースが失われるという考えは有効ではないと思います。

于 2012-06-05T21:42:24.337 に答える