Menu Navigasi

Tutorial Tutorial Pemrograman Part 63: Asynchronous Programming with ReactPHP

AI Generated
30 Desember 2025
28 views
Tutorial Tutorial Pemrograman Part 63: Asynchronous Programming with ReactPHP

Pendahuluan

Selamat datang di bagian ke-63 dari seri tutorial Tutorial Pemrograman kami! Dalam part ini, kita akan membahas konsep *asynchronous programming* di PHP menggunakan ReactPHP. Asynchronous programming memungkinkan aplikasi kita untuk menjalankan banyak tugas secara bersamaan tanpa menunggu setiap tugas selesai sebelum memulai tugas berikutnya. Ini sangat penting untuk membangun aplikasi web yang responsif dan efisien. Prasyarat:
  • Pengetahuan dasar tentang PHP.
  • Pengalaman dengan Composer (package manager untuk PHP).
  • Pemahaman dasar tentang event loops.

Konsep Dasar

Bayangkan Anda sedang membuat kopi. Secara *synchronous*, Anda akan merebus air, menggiling kopi, menyeduh kopi, dan akhirnya membersihkan alat-alatnya, satu per satu. *Asynchronous* berarti Anda bisa merebus air sambil menggiling kopi. Meskipun merebus air belum selesai, Anda tetap bisa memulai menggiling kopi. ReactPHP membantu kita mencapai ini dalam kode PHP. Di dunia pemrograman, operasi seperti membaca file dari disk atau membuat permintaan ke database bisa lambat. Dengan asynchronous programming, kita bisa melakukan tugas lain sementara operasi ini sedang berjalan. Begitu operasi selesai, kita akan diberi tahu dan bisa melanjutkan proses.

Hands-on Coding

Mari kita mulai dengan menginstal ReactPHP menggunakan Composer:
composer require react/react react/http
Setelah instalasi selesai, kita bisa membuat contoh sederhana:

addTimer(2, function () use ($resolve) {
            $resolve('Data dari database!');
        });
    });

    return $promise->then(function ($data) {
        return new Response(
            200,
            ['Content-Type' => 'text/plain'],
            "Halo dari server asynchronous! \n" . $data
        );
    });
});

$socket = new React\Socket\SocketServer('127.0.0.1:8000', $loop);

$server->listen($socket);

echo "Server berjalan di http://127.0.0.1:8000\n";

$loop->run();
Penjelasan Kode:
  • require __DIR__ . '/vendor/autoload.php';: Mengimpor autoloader Composer untuk memuat kelas ReactPHP.
  • use React\EventLoop\Factory;: Menggunakan *EventLoop* untuk menjalankan operasi asynchronous.
  • use React\Http\Server;: Menggunakan *Server* untuk membuat server HTTP.
  • $loop = Factory::create();: Membuat instance dari event loop.
  • $server = new Server($loop, function...: Membuat server HTTP yang menangani setiap permintaan.
  • $promise = new React\Promise\Promise(function (callable $resolve) {...: Membuat Promise yang akan diselesaikan setelah 2 detik. Ini mensimulasikan operasi yang lambat.
  • $loop->addTimer(2, function () use ($resolve) {...: Menambahkan timer ke event loop. Setelah 2 detik, fungsi callback akan dieksekusi, dan Promise akan diselesaikan dengan data.
  • return $promise->then(function ($data) {...: Mengembalikan respons setelah Promise diselesaikan.
  • $socket = new React\Socket\SocketServer('127.0.0.1:8000', $loop);: Membuat socket server yang mendengarkan di port 8000.
  • $loop->run();: Memulai event loop, yang akan terus berjalan sampai dihentikan.
Untuk menjalankan kode ini, simpan sebagai `server.php` dan jalankan melalui terminal:
php server.php
Anda bisa mengakses server melalui browser di `http://127.0.0.1:8000`.

Common Pitfalls

  • Blocking Operations: Pastikan untuk tidak melakukan operasi blocking (seperti membaca file secara synchronous) di dalam event loop. Ini akan membuat aplikasi Anda tidak responsif.
  • Callback Hell: Hindari nested callbacks yang berlebihan. Gunakan Promises untuk membuat kode lebih mudah dibaca dan dikelola.
  • Error Handling: Pastikan untuk menangani error dengan benar di dalam Promises.

Challenge

Coba modifikasi kode di atas untuk membaca data dari file secara asynchronous menggunakan `React\Filesystem\Filesystem`. Lihat dokumentasi ReactPHP untuk detailnya.

Sumber Referensi

Artikel sebelumnya: Advanced Error Handling and Logging in PHP
Bagikan: