時間ベースのイベントを持つブラウザベースのMMOを作成しています。IEの建物の建設には23時間かかります。
watch
これをMySQLデータベースに記録し、cronスクリプトまたは(この質問は非常に役に立ちました)を使用してイベントテーブル(または同等のもの)をループすることができます。
私は次のいずれかを行うことができるという一般的なコンセンサスがあるようです。
(1)イベントとそれに関連するトリガーを処理するスクリプトに対して毎秒cronジョブを実行します。
(2)イベントとそれに関連するトリガーを処理する59回の反復で毎秒ループするcronジョブを毎分実行します。
(3)watch
毎秒phpスクリプトを実行するために使用します。
基本的に、イベントが完了すると、スクリプトは、状態の変更、データベースの更新、最近のイベントの後にキューに入れられる他の「イベント」のトリガーなど、さまざまなトリガーを処理します。
私の最大の懸念は、毎秒10,000以上のイベントとトリガーが処理される可能性がある場合です。パフォーマンスの問題を回避するために使用できる戦略は何ですか?これらはすべての解決策ですか、それともより良い代替案がありますか?
イベントの例:
Construction of Building A - 00:43:21
2601秒早送りすると、次のトリガーが実行されます。
Place Building A on map at Location x,y
Update resource total given by building
Start timer on next building in the queue
Construction of Building B - 02:10:49
より適切に説明すると、ゲームの初期段階では、これらのイベントには5分から1時間かかります。ゲームの後の段階では、これらのイベントは数百時間の間隔で配置されます。これらのイベントはゲームの他の側面に影響を与えるため、リアルタイムで処理する必要があります(1時間ごとに提供されるリソースの量を改善するリソース構造など)。したがって、これらのイベントは、ユーザーがアクティブであるかどうかに関係なく、サーバーで処理する必要があります。理論上のスクリプトは、期限切れのイベントをチェックし、そのイベントに基づいて、そのイベントの期限切れに関連する他のいくつかのメソッドを実行します。