Как отправить больше 1000 HTTP запросов и быстро получить ответ?

проблема:

Как отправить больше 1000 HTTP запросов и быстро получить ответ?
Пока имею такой код:
$contacts = Contacts::all();
        foreach ($contacts as $contact) {
            $response = Http::get('https://site.com/api/status', [
                'key' => $contact->key,
                'email' => $contact->email
            ]);
            $response = json_decode($response);
            $status = (isset($response->result->status) ? 'Yes' : 'No');
  
	    $sts = $this->find($contact->id);
            $sts->status = $status;
            $sts->save();
        }

        return response()->json(['success' => 'Status Ok'],200);

Но он выполняется очень долго, можно ли быстрее как то отправлять запросы и получать мгновенно ответ?
  • Вопрос задан
  • 530 просмотров
Решения вопроса 3
JhaoDa
@JhaoDa
LaravelRUS Team
Используй Guzzle без Laravel-обёртки в конкурентном режиме.
Ответ написан
Комментировать
alexey-m-ukolov
@alexey-m-ukolov Куратор тега Laravel
Нет, мгновенно получать ответ вы не можете. И быстрее слать запросы тоже.
Но вы можете распараллелить отправку запросов (хоть всю 1000 разом отправьте), но ограничения пропускной спобности сети и ресурсов сервера, генерирующего ответ вы обойти никак не сможете, поэтому у вас в реальности будет 3-5 потоков, что ускорит весь скрипт примерно во столько раз.

Ну вот эту глупость вы можете оптимизировать, конечно:
$sts = $this->find($contact->id);
$sts->status = $status;
$sts->save();
Но эффекта это никакого не даст.
Ответ написан
delphinpro
@delphinpro Куратор тега Laravel
frontend developer
Какой ответ вам нужен?

Ответ от внешнего сервера вы не получите быстрее, чем он вам его отдаст.

Ответ на свой запрос к данному роуту можно получить мгновенно, закинув выполнение запросов в очередь.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы