On Thu, Mar 18, 2021 at 1:55 PM Guilliam Xavier
<guilliam.xav...@gmail.com> wrote:
>
> Hi,
>
>> Guzzle's requestAsync() returns a promise, it does not
>> interrupt/suspend the callsite. For example:
>>
>>     // this function is not interrupted/suspended -- it will return
>> synchronously
>>     function doSomething() {
>>         $this->guzzle->requestAsync(...)->then(... handle response here ...);
>>         echo "This will be printed before a response is received";
>>     }
>>
>> The following is similar to how one would implement an coroutine in
>> PHP today when using a library which implements a coroutine mechanism,
>> such as amphp. Note the yield statement which interrupts/suspends the
>> function:
>>
>>     // this function will be suspended while the request is in flight
>> -- it will return after a response is received
>>     function doSomething()
>>         $response = yield $this->guzzle->requestAsync(...);
>>         // do something with response here
>>         echo "This will be printed AFTER the response comes back";
>>     }
>>
>> Note the difference between the two. Also note how, in both of the
>> above cases, the asynchronicity is explicit and the developer has
>> opted into it. Both of the above are different approaches to that
>> being proposed in this RFC (this is a design choice by the authors).
>
>
> At the risk of sounding dumb: What would that code look like with fibers?
>
> Thanks,
>
> --
> Guilliam Xavier

Hi Guilliam,

With fibers, a non-blocking call to Guzzle would look exactly the same
as a blocking call.

     function doSomething()
         $response = $this->guzzle->request(...);
         // do something with response here
         echo "This will always be printed AFTER the response comes back";
     }

Whether request() and therefore (doSomething()) blocks the whole
process or merely suspends the current fiber would depend on whether
or not doSomething() was called within a fiber, and whether Guzzle had
fiber support, which would be defined elsewhere.

Cheers

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php

Reply via email to