2016-03-21 14 views
16

गुज़ल के साथ, वादे किसी असली उपयोगिता प्रदान करते हैं? ऐसा लगता है कि आप कॉल प्रतीक्षा() होना चाहिए। निम्नलिखित कोड (डॉक्स से) अपने आप में कुछ नहीं कर रहा है:Guzzle async का वादा क्या है?

$promise = $client->requestAsync('GET', 'http://httpbin.org/get'); 
$promise->then(
    function (ResponseInterface $res) { 
     echo $res->getStatusCode() . "\n"; 
    }, 
    function (RequestException $e) { 
     echo $e->getMessage() . "\n"; 
     echo $e->getRequest()->getMethod(); 
    } 
); 

यदि आप कॉल करना होगा $ promise-> इंतजार() अनुरोध करने के लिए, एक वादा की बात क्या है? कैसे यह वास्तव में किसी भी अलग से है:

$request = new Request('GET', 'http://httpbin.org/get'); 
$response = $client->send($request); 

if ($response 

बेस्ट मैं बता सकता हूँ, केवल लाभ यह सुविधाजनक तरीका अनुरोध सफलता और विफलता कॉलबैक परिभाषित करने के लिए है। यहां तक ​​कि एकाधिक अनुरोध करने पर दस्तावेज़ अनुभाग में नीचे दिया गया कोड है, जो सभी अनुरोधों को ब्लॉक और निष्पादित करता है ... शायद "एक ही समय" पर। क्या यह सब मुझे उम्मीद करनी चाहिए?

// Wait on all of the requests to complete. 
$results = Promise\unwrap($promises); 
+1

आस्थगित प्रसंस्करण के साथ बिल्कुल पर्याय async है उपयोग किया जाता है? –

+0

अच्छा सवाल और शायद नहीं। वास्तव में मैं इसके वादे भाग से अधिक उलझन में हूं। – originalbryan

+0

मुझे विश्वास नहीं है कि PHP वास्तव में असीमित घटना प्रबंधन (अभी तक) करने में सक्षम है, इसलिए 'प्रतीक्षा() 'के लिए कॉल करें।तो कुछ सच हो सकता है कि जावास्क्रिप्ट में जो कुछ लाभ आप देखेंगे, वे PHP के संस्करण (अभी तक) में स्पष्ट नहीं हैं, लेकिन वादे का उद्देश्य यह है कि आप इंटरफ़ेस जैसे "केवल पढ़ने के लिए" पास कर सकते हैं स्थगित में जिसे उस इंटरफ़ेस के माध्यम से हल नहीं किया जा सकता है। शायद यह पीछे की संगतता के लिए है (अभी के लिए)। –

उत्तर

8

मैं यहाँ खुला कई धाराओं एक अंग पर बाहर जा रहा हूँ, लेकिन से मैं क्या पढ़ा है ...

पीएचपी अतुल्यकालिक प्रसंस्करण नहीं कर सकते हैं, आप कर सकते हैं और साथ सौदा अवरुद्ध किए बिना उनके इनपुट। तो आपके उदाहरण में एक कनेक्शन के साथ, हाँ, कोई बिंदु/लाभ नहीं है।

लेकिन मान लीजिए कि आप 5 संसाधन लोड करना चाहते हैं। एसिंक विधियों का उपयोग करके इन संसाधनों को समान रूप से समानांतर में लोड करने में सक्षम किया जा सकता है - केवल एक को लोड करने के बजाय केवल एक को शुरू करने के बजाय।

और गुज़ल उपयोग मामलों को संभालने के तरीके प्रदान करता है जैसे "वे सभी ठीक से लोड होने के बाद ..." या "जब वे सभी लोड हो गए या विफल हो गए ..."।

तो मुझे लगता है कि यह कई अनुरोधों को संभालने के दौरान तेजी से प्रसंस्करण को सक्षम करना चाहिए जो समवर्ती रूप से हो सकता है।

1

Async को कुछ विपरीत सोच की आवश्यकता है। - आप इसे प्रक्रियात्मक करते हैं अपने मार्ग (या स्क्रिप्ट) के लिए एक एपीआई (http://ipsum.org/) तुम वापस (आईडी) के द्वारा डेटा की एक सूची प्राप्त करने की आवश्यकता होती है यह देखते हुए:

यहाँ एक परिदृश्य पैदा हो सकता है कि उपयोगी हो सकता है है , आपको प्रत्येक अनुरोध के माध्यम से लूप करना होगा और जब तक यह सब वापस न आए तब तक प्रतीक्षा करें।

गुज़ल वादा के साथ, आप प्रतिक्रिया के लिए "तैयार" कर सकते हैं और फिर जब यह वापस आता है - तो आप इसे संसाधित कर सकते हैं। इसका लाभ यह है कि आपकी स्क्रिप्ट निष्पादित करने के लिए अनुरोध के अनुरोध के टी टी समय के बजाय, विलंबता अब सीईआईएल (सभी प्रतिक्रियाओं का सबसे धीमा प्रतिक्रिया समय) है क्योंकि आप सभी प्रतिक्रियाओं के लिए वापस आने के लिए "प्रतीक्षा करें" लेकिन वे हैं इसके बजाय समानांतर में भेजा गया।

दूसरे शब्दों में, आप धारावाहिक के बजाय समानांतर में अनुरोध भेज रहे हैं ताकि आप वापसी की प्रतिक्रिया के लिए प्रतीक्षा कर सकें या आप पहले कर्ल कॉल को पूर्व-निष्पादित कर सकें, और उसके बाद "ठीक है" वापसी, मुझे प्रतिक्रिया तैयार करने दें "।

बाद के हिस्से कुछ पुनर्गठन की आवश्यकता होगी, क्योंकि हम "जाओ, लाने इंतजार जवाब के साथ तो, पीठ, हम प्रतिक्रिया पर काम कर सकते हैं" करने के लिए

संबंधित मुद्दे