Guzzle Pool: پروکسی هر کار را به requestAsync بدهید
گزینههای پروکسی را به هر عملیات ناهمگام پیوست کنید، نه به پیام درخواست PSR-7 یا کارخانه مسدودکننده.
پروکسی هر کار Guzzle را روی عملیات ناهمگامی قرار دهید که استخر آغاز میکند. درون یک راهاندازی موجود کلاینت، از کارخانههای وعده استفاده کنید:
$operations = function () use ($client, $jobs) {
foreach ($jobs as $id => $job) {
yield $id => function () use ($client, $job) {
return $client->requestAsync('GET', $job['url'], [
'proxy' => $job['proxy'],
'timeout' => 20,
]);
};
}
};
$pool = new GuzzleHttp\Pool($client, $operations(), [
'concurrency' => 4,
]);
$pool->promise()->wait();
هر کار اعتبارسنجیشده یک مقصد و یک پروکسی فراهم میکند. برای درخواست عمومی مجاز، یک نامزد HTTP از فهرست پروکسی HTTP میتواند نشانی پروکسی بدون اعتبارنامهٔ آن کار را فراهم کند؛ انتخاب پیش از اجرای کارخانهٔ آن رخ میدهد. درخواست PSR-7 پیام HTTP را توصیف میکند، در حالی که این گزینههای ارسال ترابری را کنترل میکنند. چاپ یا ذخیرهٔ مقدار پروکسی در کنار پیام نمیتواند عملیاتی را پیکربندی کند که آن را به روش دیگری میفرستد.
از کارخانه requestAsync() را برگردانید. فراخوانی request() همگام در آنجا میتواند هنگام تلاش استخر برای آغاز کار همزمان مسدود شود.
با استفاده از مدیریت موجود برنامه، پاسخهای تکمیلشده و ردشده را اضافه کنید. کلید کار، شناسهٔ پروکسی انتخابشده و شمارهٔ تلاش را در هر دو نتیجه نگه دارید؛ ترتیب تکمیل با ترتیب ورودی متفاوت است. پس از ثبت یکی برای کار، مخفیانه نقطهٔ پایانی دیگری در کارخانه انتخاب نکنید.
مقدار همزمانی کار این استخر را محدود میکند. چند کار که یک پروکسی یا حساب محدود را انتخاب میکنند ممکن است هنوز به بودجهٔ جداگانهای برای آن نقطهٔ پایانی نیاز داشته باشند.
نتایج را بر اساس مرحله تفسیر کنید: رد مقصد، احراز هویت پروکسی و پایان مهلت اتصال نتایج متفاوتی هستند. گزینههای ارسال نگهداشتهشده با کار نشان میدهند کدام مسیر هر نتیجه را تولید کرده است.