امروزه درخواست های نامتقارن (Async) بسیار مهم هستند و همه زبان های برنامه نویسی بزرگ سعی می کنند این امکان را به توسعه دهندگان خود بدهند.
شاید بخواهید درخواستی ارسال کنید و در واقع نمی خواهید منتظر پاسخ آن درخواست باشید، بنابراین درخواست های نامتقارن می توانند در این شرایط به شما کمک کنند.
اول از همه، باید یک handler و یک شی از client ایجاد کنیم.
use GuzzleHttp\Client; use GuzzleHttp\Handler\CurlMultiHandler; $handler = new CurlMultiHandler(); $client = new Client(['handler' => $handler]);
پس از آن می خواهیم در همان صفحه درخواست ارسال را فراخوانی کنیم.
$client->postAsync($this->url, [ 'headers' => [ // هدر مربوطه را اینجا مینویسیم ], 'json' => [ // بدنه درخواست را اینجا می نویسیم ] ]) ->then(function ($result) { // اگر درخواست با موفقیت انجام شود این قسمت از برنامه اجرا خواهد شد. }) ->otherwise(function ($reason){ // اگر درخواست به خطا بخورد این قسمت از برنامه اجرا خواهد شد. });
بعد از postAsync دو نوع متد callback وجود دارد که متد then یک تابع دریافت می کند و نتیجه را به تابع برمیگرداند.
بنابراین در صورت موفقیت آمیز بودن درخواست، کد شما در متد then اجرا خواهد شد.
و همچنین در صورت وجود هر گونه خطایی، کد شما در متد otherwise اجرا خواهد شد.
برای اجرای درخواست async باید هندلری را که قبلا ایجاد شده بود فراخوانی کنید و متدی به نام tick را فراخوانی کنید.
$handler->tick();
توجه: guzzle فقط برای لاراول نیست و میتوانید در همه جا درکنار PHP از آن استفاده کنید.
تمامی کد:
use GuzzleHttp\Client; use GuzzleHttp\Handler\CurlMultiHandler;$handler = new CurlMultiHandler(); $client = new Client(['handler' => $handler]);$client->postAsync($this->url, ['headers' => [ // header will be here ],'json' => [ // body will be here ]])->then(function ($result) { // request returned successfully with results })->otherwise(function ($reason){ // The request was not complete and there are some reasons });$handler->tick();
موفق باشید
حمید روحانی