6

プレミアシップ フットボール ゲームのライブ スコアを表示するモバイル アプリを開発しています。ゲームの開始時に、30 秒ごとに外部 API にクエリを実行して、最新のスコアを取得したいと考えています。ほとんどの試合3pmは土曜日の に始まりますが、 に始まるものもあれば、 に始まるものも12.45pmあり、1.30pm日曜日に始まるものもあれば、平日の遅くとも に始まるものもあります。2pm3pm8pm

データベースに、シーズンのすべてのフィクスチャーと開始時刻が入力されたテーブルがあります。

したがって、データベースをチェックしてゲームが開始されているかどうかを確認すると(ゲームはこれらの時間外に開始されることはありません)15の間、毎分実行される cron が必要だと思います。次に、ゲームが開始された場合、そのゲームの最新のスコアを毎秒外部 API に照会する別の cron を開始する必要があります。この cron は約.12.458pm301 hour and 45 minutes

この種の cron セットアップを実現する最善の方法は何でしょうか? Plesk ソフトウェアが実行されている共有サーバーを使用していますが、サーバーへの ssh アクセスがありません。

4

3 に答える 3

2

あなたのコメントの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:5921: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 かに関係なく、最後のゲームが終了した後に停止する) を使用してプロセスを毎日実行し、まだ実行されていない場合はそれに応じて再起動することです。

于 2013-11-17T05:45:35.487 に答える
1

あなたの説明からすると、cron ベースのソリューションは最善のアプローチとは思えません。

ゲームの開始を定期的にチェックするデーモン (またはデーモンのような) プロセスをセットアップすることをお勧めします (たとえば、15 分ごとに、最初の cron ジョブの役割を果たします)。ゲームの開始 (2 番目の cron ジョブの役割)。

特に cron が好きな場合は、デーモン プロセスが実行されていることを確認し、そうでない場合は起動する cron ジョブを作成できます ;)

于 2013-11-16T20:43:24.713 に答える