在每个帖子上,我都有一个网址。我需要获取状态并每小时检查一次此站点是否在线。我如何使用队列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多个不同的站点。我需要检查每个站点是否在线,或者每天至少检查一次。