حمید روحانی
حمید روحانی
خواندن ۲ دقیقه·۳ سال پیش

ایجاد درخواست های نامتقارن در php و لاراول - Send an asynchronous request with Guzzle


امروزه درخواست های نامتقارن (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();

موفق باشید
حمید روحانی

laravelphpلاراولasynchronousasync
PHP Developer - Web Developer
شاید از این پست‌ها خوشتان بیاید