Tahukah Anda bahwa Asynchronous HTTP client requests akan datang di Laravel 8.x. Lihat pada bulan Maret 2020, ketika Laravel 7 dirilis , klien HTTP baru diperkenalkan oleh Laravel yang pada dasarnya adalah pembungkus klien HTTP Guzzle .
Anda telah melihat bahwa ini membuat pengalaman pengembang jauh lebih lancar dan lebih mudah. Misalnya, permintaan POST biasa menggunakan klien HTTP akan terlihat seperti ini
$response = Http::post('http://test.com/users', [
'name' => 'Ujang Kusnadi',
'role' => 'Software Engineer',
]);
Concurrent Asynchronous Requests
Seperti yang saya sebutkan di atas, PR oleh Andrea Marco Sartori ini membawa konkurensi saat mengirim permintaan klien asynchronous dengan klien HTTP Laravel dengan menggunakan Guzzle/Promises di bawah tenda. PR ini akan disertakan dalam rilis Laravel 8.x berikutnya.
Pada dasarnya ada dua cara Anda dapat membuat permintaan asynchronous menggunakan ini.
- Permintaan asynchronous menggunakan
async()
- Kumpulan untuk menangani beberapa permintaan asynchronous secara bersamaan
Asynchronous client requests menggunakan async()
Jika Anda ingin membuat permintaan asynchronous, Anda dapat membuatnya seperti itu.
$promise = Http::async()->get($url);
Untuk membuat permintaan klien asynchronous, Anda perlu mengaitkan async()
metode pada klien Http sebelum membuat permintaan. Tetapi alih-alih mengembalikan respons, itu akan mengembalikan janji yang dapat Anda selesaikan/tolak seperti ini
$promise = Http::async()->get($url)->then(
fn (Response|TransferException $result) => $this->handleResult($result)
);
Dan ini adalah bagaimana kita bisa mendapatkan respons dari permintaan asynchronous.
Kumpulan untuk multiple async requests
Jika Anda ingin membuat beberapa permintaan asynchronous secara bersamaan, Anda dapat menggunakan kumpulan seperti itu.
use Illuminate\Http\Client\Pool;
$responses = Http::pool(fn (Pool $pool) => [
$pool->get('https://httpbin.org/delay/6')->then(/* ... */),
$pool->get('https://httpbin.org/delay/3')->then(/* ... */),
$pool->get('https://httpbin.org/delay/3')->then(/* ... */),
]);
$responses[0]->ok();
$responses[1]->successful();
Semoga dapat membantu Anda.
Lev Yasin
Instruktur Web Programming Mataweb
Sangat tertarik dengan dunia Pemrograman Web & Mobile, saat ini fokus pada bagian Backend Web Developer, menggunakan PHP sebagai bahasa pemrograman utama, biasanya saya menggunakan Laravel.