truncate(); //截断表 $taskUrls = Site::query()->whereIn('status', [2,3,5,8,9])->selectRaw('id as site_id,cn_title,webmaster_domain as domain')->limit(1)->get(); $client = new Client([ 'verify' => false, 'timeout' => 10 ]); //并发请求链接地址 $requests = function () use ($client, $taskUrls) { foreach ($taskUrls as $item) { if (empty($item->domain)) continue; yield new \GuzzleHttp\Psr7\Request('GET',$item->domain); } }; $failed = []; $pool = new Pool($client, $requests(), [ 'concurrency' => 5, //同时并发抓取几个 'rejected' => function (\Throwable $throwable, $index) use (&$failed) { $failed[] = $index; }, ]); $promise = $pool->promise(); $promise->wait(); $failedSites = collect([]); foreach ($taskUrls as $key => $item) { if (in_array($key, $failed)) { $item->setCreatedAt(date('Y-m-d H:i:s')); $item->setUpdatedAt(date('Y-m-d H:i:s')); $failedSites->push($item); } } //分批批量插入 $failedSites->chunk(50)->each(function (Collection $item, $key) { UrlCheckModel::query()->insert($item->toArray()); }); $this->info('success'); return; } }