Permintaan Guzzle dapat kehabisan waktu saat menunggu slot koneksi
Tetapkan anggaran koneksi aktif cURL multi pada handler bersama dan bedakan dari kapasitas cache menganggur.
Jika permintaan asinkron kedaluwarsa sebelum membuka koneksi, periksa batas aktif transport serta batas waktu jaringan. libcurl mengantrekan transfer ketika batas tersebut terpakai, dan anggaran batas waktunya terus berjalan selama dalam antrean.
Untuk handler cURL multi bersama Guzzle 7:
use GuzzleHttp\Client;
use GuzzleHttp\HandlerStack;
use GuzzleHttp\Handler\CurlMultiHandler;
$multi = new CurlMultiHandler([
'options' => [
CURLMOPT_MAX_TOTAL_CONNECTIONS => 24,
CURLMOPT_MAX_HOST_CONNECTIONS => 4,
],
]);
$client = new Client([
'handler' => HandlerStack::create($multi),
]);Gunakan klien ini untuk pekerjaan asinkron dan berikan opsi proxy yang dimaksudkan pada operasi. Nilainya adalah contoh anggaran. Untuk permintaan publik yang diizinkan melalui perantara publik, daftar proxy HTTP menyediakan kandidat untuk URL proxy operasi.
| Opsi | Anggaran |
|---|---|
| MAX_TOTAL_CONNECTIONS | Koneksi terbuka bersamaan di bawah handler multi |
| MAX_HOST_CONNECTIONS | Koneksi ke satu host/port; koneksi proxy dihitung terhadap endpoint proxy |
| MAXCONNECTS | Koneksi yang dipertahankan di cache setelah digunakan |
Beberapa situs web yang memakai proxy yang sama tidak otomatis memperoleh jatah koneksi proxy terpisah. Kapasitas cache menganggur tidak membuka koneksi lebih dulu dan tidak membuatnya dapat dipertukarkan: penggunaan ulang bergantung pada rute, tujuan, protokol, dan autentikasi.
Jaga anggaran tugas aplikasi dan jatah penyedia apa pun tetap konsisten dengan anggaran transport ini. Keduanya menghitung koneksi, bukan permintaan per detik. Menaikkan batas waktu soket tidak dapat mengidentifikasi apakah antrean atau penantian jaringan yang menghabiskan waktu.