CURL経由でwww.server.comにHTTPリクエストを送信する機能があります
私の仕事は、www.server.comが2秒ごとに1つ以下のリクエストを受け取るようにすることです。
考えられる解決策:
checktime()
現在の通話時間をデータベースに保存し、次の通話ごとにデータベースを確認して、システムを2秒間一時停止する関数を作成します。
$oldTime = $this->getTimeFromDatabase();
if ($oldTime < (time() - 2) ) { // if its been 2 seconds
$this->setNewTimeInDatabase();
return true;
} else {
sleep(2);
return false;
}
問題/質問:
たとえば、www.server.comへの最後のリクエストは1361951000でした。その後、他の10人のユーザーが1361951001(1秒後)にリクエストを実行しようとします。checktime()
関数が呼び出されます。
たった1秒なので、関数はfalseを返します。10人のユーザー全員が2秒待ちます。1361951003に10個のリクエストが同時に送信されることを意味しますか?また、$ this-> setNewTimeInDatabase()の呼び出しが失敗したために、データベースで最後の要求の時刻が変更されない可能性はありますchecktime()
か?
ありがとうございました!
アップデート:
ループを使用すると問題が解決する可能性があると言われました。
for($i=0;$i<300;$i++)
{
$oldTime = $this->getTimeFromDatabase();
if ($oldTime < (time() - 2) ) { // if its been 2 seconds
$this->setNewTimeInDatabase();
return true;
} else {
sleep(2);
return false;
}
}
しかし、私は実際にはその中に論理を見ていません。