Menu Navigasi

Tutorial Tutorial Pemrograman Part 55: PHP Asynchronous Programming dengan ReactPHP

AI Generated
29 Desember 2025
16 views
Tutorial Tutorial Pemrograman Part 55: PHP Asynchronous Programming dengan ReactPHP

Pendahuluan

Selamat datang di bagian ke-55 dari seri tutorial pemrograman PHP lengkap kami! Di bagian ini, kita akan menyelami pemrograman asinkronus di PHP menggunakan ReactPHP. Pemrograman asinkronus memungkinkan aplikasi Anda melakukan banyak tugas secara bersamaan tanpa memblokir eksekusi utama, meningkatkan kinerja dan daya tanggap aplikasi Anda. Bagian ini sangat penting setelah mempelajari arsitektur microservice, karena komunikasi antar microservice seringkali bisa ditingkatkan dengan mekanisme asinkronus.

Prasyarat:

Konsep Dasar

Asinkronus vs Sinkronus: Bayangkan Anda sedang memesan makanan di restoran. Dalam eksekusi sinkronus, Anda akan menunggu pesanan Anda selesai sebelum melakukan hal lain. Dalam eksekusi asinkronus, Anda memesan makanan, lalu melakukan hal lain (misalnya membaca buku), dan pelayan akan memanggil Anda ketika makanan Anda siap.

ReactPHP adalah pustaka event-driven, non-blocking I/O untuk PHP. Ini memungkinkan Anda menulis aplikasi yang menangani beberapa koneksi secara bersamaan tanpa menggunakan thread atau proses terpisah.

Event Loop

Inti dari ReactPHP adalah event loop. Event loop memantau berbagai sumber (misalnya soket, timer, sinyal) dan memicu callback saat suatu peristiwa terjadi. Ini memungkinkan Anda menulis kode non-blocking yang responsif dan efisien.

Hands-on Coding

Mari kita buat server HTTP sederhana menggunakan ReactPHP yang merespons permintaan secara asinkronus.

Langkah 1: Instalasi ReactPHP

Gunakan Composer untuk menginstal komponen yang diperlukan:

composer require react/react react/http

Langkah 2: Membuat Server HTTP Asinkronus

Buat file bernama server.php dengan konten berikut:


 'text/plain'],
 "Hello, World!\n"
 );
});

$socket = new \React\Socket\Server(1337, $loop);
$server->listen($socket);

echo 'Server listening on port 1337.\n';

$loop->run();

Penjelasan Kode:

  • require __DIR__ . '/vendor/autoload.php';: Menyertakan autoloader Composer untuk memuat pustaka ReactPHP.
  • use React\Http\Server;, use React\Http\Response;, use React\EventLoop\Factory;: Mengimpor kelas-kelas yang diperlukan dari ReactPHP.
  • $loop = Factory::create();: Membuat instance event loop.
  • $server = new Server($loop, function (ServerRequestInterface $request) { ... });: Membuat server HTTP yang menangani setiap permintaan dengan fungsi callback.
  • return new Response(200, ['Content-Type' => 'text/plain'], "Hello, World!\n");: Membuat respons HTTP dengan kode status 200, header Content-Type, dan isi "Hello, World!".
  • $socket = new \React\Socket\Server(1337, $loop);: Membuat soket yang mendengarkan koneksi pada port 1337.
  • $server->listen($socket);: Mengarahkan server HTTP untuk mendengarkan koneksi pada soket.
  • echo 'Server listening on port 1337.\n';: Menampilkan pesan bahwa server sedang berjalan.
  • $loop->run();: Memulai event loop, yang akan terus berjalan sampai dihentikan secara manual.

Langkah 3: Menjalankan Server

Buka terminal dan jalankan server dengan perintah berikut:

php server.php

Anda akan melihat pesan "Server listening on port 1337."

Langkah 4: Menguji Server

Buka browser Anda dan kunjungi http://localhost:1337. Anda akan melihat pesan "Hello, World!"

Common Pittfalls

  • Blocking I/O: Hindari menggunakan fungsi I/O blocking (seperti sleep() atau fungsi database blocking) di dalam event loop, karena ini akan memblokir seluruh aplikasi. Gunakan fungsi non-blocking atau pustaka yang mendukung ReactPHP.
  • Error Handling: Pastikan untuk menangani kesalahan dengan benar, terutama dalam callback asinkronus. Gunakan blok try-catch atau mekanisme penanganan kesalahan lain untuk mencegah aplikasi Anda crash.
  • Memory Management: Berhati-hatilah dengan penggunaan memori, terutama saat menangani banyak koneksi secara bersamaan. Hindari membuat objek besar yang tidak perlu dan pastikan untuk melepaskan sumber daya yang tidak lagi digunakan.

Challenge

Ubah server HTTP di atas untuk membaca isi file secara asinkronus dan menampilkannya sebagai respons. Gunakan fungsi React\Filesystem\Filesystem::readFile() untuk membaca file secara non-blocking.

Sumber Referensi

Bagikan: