检查每个站点的最佳方法,如果它是在线的Laravel

时间:2019-02-26 21:10:07

标签: php laravel

在每个帖子上,我都有一个网址。我需要获取状态并每小时检查一次此站点是否在线。我如何使用队列Laravel做到这一点?我有一个CheckIfOnline工作:

public function handle(Post $post)
{

         if($this->checkOnline($post->site_url) {
              $post->website_online = true;
              $post->save();
         }

}

private function checkOnline($domain) {
    $curlInit = curl_init($domain);
    curl_setopt($curlInit,CURLOPT_CONNECTTIMEOUT,10);
    curl_setopt($curlInit,CURLOPT_HEADER,true);
    curl_setopt($curlInit,CURLOPT_NOBODY,true);
    curl_setopt($curlInit,CURLOPT_RETURNTRANSFER,true);

    //get answer
    $response = curl_exec($curlInit);

    curl_close($curlInit);
    if ($response) return true;
    return false;
}

任务中:

 /**
 * Define the application's command schedule.
 *
 * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
 * @return void
 */
protected function schedule(Schedule $schedule)
{
    $schedule->call(function () {
       foreach(Post::all() as $post) {
    CheckIfOnline::dispatch($post);
}
    })->hourly();
}

如果我要检查10,000个站点,那将花费很长时间。

如何正确执行此操作?在数据库中,所有站点都不同。但是我有10000多个不同的站点。我需要检查每个站点是否在线,或者每天至少检查一次。

0 个答案:

没有答案