あなたのコメントの1つから判断する
主な問題は、ssh アクセスのない共有サーバーにいることです...
ここでの問題は、コマンド シェルにアクセスできず、Plesk を使用してのみファイルをサーバーにレンダリングできることだと思います。したがって、ソリューションをレンダリングするには、cron ジョブを使用します。
その場合、実行できる cron ジョブの数/cron ジョブに許可される最小頻度の制限について、ホスティング プロバイダーに再確認することをお勧めします。cron ジョブの処理に制限がある場合は、オンラインの cron スケジューラ (このような) を使用できます。外部の cron サービスでは、一般にアクセス可能な URL へのアクセスのみが許可されるため、それに応じてコードを記述してデプロイする必要があることに注意してください。
今後は、cron ジョブが機能しており、問題はないと仮定します。
ゲームの開始時に、30 秒ごとに外部 API にクエリを実行して、最新のスコアを取得したいと考えています。ほとんどの試合は土曜日の午後 3 時に始まりますが、午後 12 時 45 分に始まるものもあれば、日曜日の午後 1 時 30 分、午後 2 時、午後 3 時に開始するものもあれば、平日の午後 8 時に開始するものもあります。
アプローチ1
単一のupdateMatchesAndScores.php
ファイルを使用して、新しい試合の試合情報を更新し (データベースでアクティブ/クローズとしてマークします)、現在アクティブな試合のスコアを更新します。
一致がオンの場合、cron ジョブはその種類のロジックを処理できず、これを実行するだけです。そのロジックはスクリプトに移動する必要があります。
12-10 PM
その後、次のように実行できます
* 12-22 * * * php -f updateMatchesAndScores.php
* 12-22 * * * sleep 30 && php -f updateMatchesAndScores.php
url の場合はhttp://some.server.address.com/updateMatchesAndScores
こうなります
* 12-22 * * * wget http://some.server.address.com/updateMatchesAndScores
* 12-22 * * * sleep 30 && wget http://some.server.address.com/updateMatchesAndScores
ゲームが時間範囲内に発生すると仮定すると、これを複数の cron ジョブ (,,)に分割でき12.45-12.59
ます。これにより、不要な実行などが最適化されます。13:00-20:59
21:00-21:45
[12.45, 21:45]
12.00-12.45
アプローチ 2
1 回限りの cron ジョブを使用してデーモン プロセスを 1 回開始し、それがまだ実行されているかどうかを 1 分ごとに確認します。
script を呼び出しましょうupdateMatchesAndScores.php
。これにスリープ機能を入れます (1) ゲームがオンになっていない場合は 15 分間 (2) これでゲームがオンになっている場合は 30 秒間 (3) 21:46 から翌日の 12:44 までスリープします。このスクリプトで 30 分ごとにスリープする (2) を実装する必要がないように、ゲームごとに個別のサブプロセスを生成できます。
警告 - (1) スクリプトの実行時間がコードを少し遅らせ始めるため、15 分がすぐに 15 分x 秒に変わります(2) php には最大実行時間があるため、それを設定する必要があります(3) コードの品質によっては、メモリ リークが発生する可能性があります。
ここでの最適化は、cron ジョブ (21:46 か 4:30 かに関係なく、最後のゲームが終了した後に停止する) を使用してプロセスを毎日実行し、まだ実行されていない場合はそれに応じて再起動することです。