Guzzle Pool፦ የእያንዳንዱን ስራ ፕሮክሲ ለrequestAsync አስተላልፍ
የፕሮክሲ አማራጮችን ለእያንዳንዱ ያልተመሳሰለ ክንውን አያይዝ፣ ለPSR-7 ጥያቄ መልእክት ወይም ለሚያግድ ፋብሪካ አይደለም።
የእያንዳንዱን የGuzzle ስራ ፕሮክሲ በመጠባበቂያው (pool) በሚጀመረው ያልተመሳሰለ ክንውን ላይ አስቀምጥ። አስቀድሞ በተዘጋጀ የደንበኛ ማዋቀር ውስጥ የተስፋ (promise) ፋብሪካዎችን ተጠቀም፦
$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() መጥራት መጠባበቂያው ተመሳሳይ ጊዜ ያላቸውን ስራዎች ለመጀመር ሲሞክር ሊያግድ ይችላል።
የተፈጸሙና የተጣሉ መልሶችን በመተግበሪያው ነባር አያያዝ አክል። የስራ ቁልፉን፣ የተመረጠውን የፕሮክሲ መለያና የሙከራ ቁጥሩን በሁለቱም ውጤቶች አቆይ፤ የማጠናቀቂያ ቅደም ተከተል ከግብዓት ቅደም ተከተል ይለያል። ለስራው አንዱን ከመዘገብህ በኋላ በፋብሪካው ውስጥ በምስጢር ሌላ መጨረሻ ነጥብ አትምረጥ።
የተመሳሳይ ጊዜ እሴት የዚህን መጠባበቂያ ስራ ይገድባል። ብዙ ስራዎች አንድ የተገደበ ፕሮክሲ ወይም አካውንት ቢመርጡም ለዚያ መጨረሻ ነጥብ የተለየ በጀት ያስፈልጋቸዋል።
ውጤቶችን በደረጃ ተርጉም፦ የመድረሻ ውድቅ፣ የፕሮክሲ ማረጋገጫና የግንኙነት ጊዜ ማለፍ የተለያዩ ውጤቶች ናቸው። ከስራው ጋር የተያዙት የመላኪያ አማራጮች የትኛው መንገድ እያንዳንዱን ውጤት እንዳመጣ ያሳያሉ።