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 প্রার্থী সেই কাজের ক্রেডেনশিয়াল-মুক্ত প্রক্সি URL দিতে পারে; নির্বাচন তার ফ্যাক্টরি চলার আগেই হয়। একটি PSR-7 অনুরোধ HTTP বার্তা বর্ণনা করে, আর এই পাঠানোর অপশনগুলো পরিবহন নিয়ন্ত্রণ করে। বার্তার পাশে প্রক্সি মান প্রিন্ট বা সংরক্ষণ করলে অন্য উপায়ে পাঠানো অপারেশন কনফিগার করা যায় না।
ফ্যাক্টরি থেকে requestAsync() ফেরত দিন। সেখানে সিঙ্ক্রোনাস request() কল করলে পুল সমান্তরাল কাজ শুরু করার চেষ্টা করার সময় ব্লক হতে পারে।
অ্যাপ্লিকেশনের বিদ্যমান হ্যান্ডলিং ব্যবহার করে সম্পন্ন ও প্রত্যাখ্যাত কলব্যাক যোগ করুন। কাজের কী, নির্বাচিত প্রক্সি শনাক্তক এবং চেষ্টার সংখ্যা উভয় ফলাফলে রাখুন; সমাপ্তির ক্রম ইনপুট ক্রম থেকে ভিন্ন। কাজের জন্য একটি রেকর্ড করার পর ফ্যাক্টরিতে গোপনে অন্য এন্ডপয়েন্ট বাছবেন না।
কনকারেন্সি মান এই পুলের কাজ সীমাবদ্ধ করে। একটি সীমিত প্রক্সি বা অ্যাকাউন্ট বেছে নেওয়া একাধিক কাজের তবুও সেই এন্ডপয়েন্টের জন্য আলাদা বাজেট লাগতে পারে।
পর্যায় অনুযায়ী ফলাফল ব্যাখ্যা করুন: গন্তব্য প্রত্যাখ্যান, প্রক্সি প্রমাণীকরণ এবং সংযোগ টাইমআউট ভিন্ন ফলাফল। কাজের সঙ্গে রাখা পাঠানোর অপশন দেখায় কোন পথে প্রতিটি ফলাফল এসেছে।