Memandu instalasi Swoole secara lengkap lewat pecl, kompilasi manual dengan build options, dan image Docker, lalu membedah setelan php.ini seperti swoole.use_shortname, ditutup dengan verifikasi runtime lewat php --ri swoole dan pengujian kecil pertama.

Setelah di episode 2 kita memahami arsitektur — Master, Manager, worker, event loop, dan coroutine — pada episode kali ini kita masuk ke tangan: instalasi lengkap dan konfigurasi Swoole yang benar. Ini adalah gerbang menuju semua episode praktik berikutnya; ekstensi yang terinstall dengan build options salah akan membuat episode 13 (database) dan 18 (TLS) tersendat.
Mengapa episode ini penting? Karena Swoole adalah ekstensi C yang dikompilasi — bukan sekadar di-unzip. Setiap fitur (SSL, coroutine hooks untuk MySQL/Redis, pgsql, WebSocket) bisa diaktifkan atau dinonaktifkan saat build. Kalian wajib tahu cara mengaktifkannya dan cara memverifikasi hasilnya.
Cara tercepat dan paling direkomendasikan untuk development:
sudo pecl install swoolepecl akan menanyakan beberapa pilihan interaktif saat build (misal enable sockets supports? [no]). Untuk instalasi non-interaktif di CI atau otomasi, kirim jawaban lewat pipe:
printf "\n" | sudo pecl install swooleBila kalian butuh build options spesifik, kompilasi dari source:
git clone https://github.com/swoole/swoole-src.git
cd swoole-src
phpize
./configure --enable-openssl --enable-sockets --enable-mysqlnd \
--enable-coroutine-postgresql
make -j$(nproc)
sudo make installOpsi configure yang sering dipakai:
| Opsi | Fungsi |
|---|---|
--enable-openssl | Dukungan TLS/SSL (dipakai episode 18) |
--enable-sockets | Ekstensi sockets untuk client socket mentah |
--enable-mysqlnd | Coroutine MySQL/Redis client (episode 13) |
--enable-coroutine-postgresql | Client PostgreSQL coroutine |
--enable-swoole-json | Parsing JSON lebih cepat di HTTP server |
Setelah itu aktifkan ekstensi di php.ini:
extension=swoole.soTip
Cari tahu lokasi php.ini dengan php --ini. Idealnya Swoole diletakkan di file terpisah (/etc/php/8.5/cli/conf.d/20-swoole.ini) agar tidak bercampur dengan setelan lain — terutama karena CLI dan FPM bisa punya php.ini berbeda.
Image resmi phpswoole/swoole sudah dibangun dengan build options lengkap:
docker run --rm -it phpswoole/swoole:latest php --ri swooleImage ini ideal sebagai basis deployment — kita pakai kembali di episode 22.
swoole.use_shortnameSecara default, fungsi global seperti go(), chan(), defer(), dan konstanta SWOOLE_* tersedia tanpa namespace. Ini nyaman tapi berbahaya: nama go, defer, dan Coroutine bisa bentrok dengan simbol di kode atau library lain. Praktik terbaiknya:
swoole.use_shortname=OffSaat Off, kalian wajib memakai nama lengkap: Swoole\Coroutine::create() / Coroutine\go() alih-alih go(), dan Swoole\Coroutine\Channel alih-alih chan(). Semua contoh di series ini memakai nama lengkap agar aman di kedua mode.
| Setelan | Default | Fungsi |
|---|---|---|
swoole.enable_coroutine | On | Aktifkan coroutine di worker |
swoole.enable_library | On | Muat library PHP bawaan Swoole |
swoole.display_errors | On | Tampilkan error ke stderr |
swoole.unixsock_buffer_size | 2M | Buffer pipe antar proses |
Setelah install, verifikasi ekstensi termuat dan melihat build options-nya:
php -m | grep swoole
php --ri swoolephp --ri swoole menampilkan versi, author, dan daftar build options (swoole.enable-openssl → On/Off, dll). Inilah alat diagnostik utama — setiap kali fitur "anehnya tidak jalan", cek dulu build options di sini.
Buat server HTTP minimal sebagai smoke test:
<?php
use Swoole\Http\Server;
use Swoole\Http\Request;
use Swoole\Http\Response;
$server = new Server('0.0.0.0', 9501);
$server->on('Request', function (Request $req, Response $res) {
$res->end("<h1>Swoole OK</h1>");
});
$server->start();Jalankan dan uji:
php smoke.phpcurl http://127.0.0.1:9501/Warning
Swoole tidak bisa berjalan bersamaan dengan ekstensi xdebug dalam mode step-debugging di Swoole 6.x klasik (kecuali OpenSwoole 26.2 yang sudah mendukungnya). Untuk development, nonaktifkan xdebug saat menjalankan server Swoole; kalian tidak akan butuh step debug karena error dicetak ke stderr — tema yang kita dalami di episode 19.
| Gejala | Penyebab | Solusi |
|---|---|---|
Cannot find config.m4 | Belum menjalankan phpize | Jalankan phpize di direktori source |
PHP headers not found | php-dev tidak terinstall | sudo apt install php-dev (versi sesuai) |
swoole.so tidak termuat | Baris extension di file php.ini yang salah | Cek php --ini untuk file yang benar |
Class Swoole\Http\Server not found | Ekstensi gagal load / build salah | Cek php --ri swoole dan log error PHP |
Pada episode 3 ini, kalian telah menguasai instalasi dan fondasi config Swoole.
Inti yang harus dibawa pulang:
pecl install swoole untuk dev, kompilasi manual untuk build options spesifik, image Docker untuk production.openssl, sockets, mysqlnd, coroutine-postgresql.swoole.use_shortname=Off menghindari bentrok simbol — pakai nama lengkap Swoole\....php --ri swoole — cek versi dan build options.Di episode 4 selanjutnya, kita membangun HTTP server dasar dengan Swoole\Http\Server — memahami objek Request dan Response, siklus event on('Request'), serta routing manual tanpa framework. Sampai jumpa di episode 4!