Membangun Aplikasi PHP Berkinerja Tinggi dengan Swoole di ServBay
ServBay adalah lingkungan pengembangan web lokal yang dirancang khusus untuk developer. ServBay sudah terintegrasi dengan berbagai bahasa pemrograman, database, dan alat bantu sehingga memudahkan proses pengembangan lokal Anda. Artikel ini akan memandu Anda cara memanfaatkan ekstensi Swoole di lingkungan ServBay untuk mengembangkan aplikasi PHP yang sangat efisien dan scalable.
Apa itu Swoole?
Swoole adalah mesin komunikasi jaringan paralel dan performa tinggi berbasis coroutine yang dirancang untuk PHP. Ditulis sepenuhnya menggunakan C, Swoole menghadirkan kemampuan komunikasi jaringan asinkron, paralel, dan coroutine untuk bahasa PHP. Dengan Swoole, developer PHP tidak lagi terikat pada model permintaan-response tradisional web server (misal Apache/Nginx + PHP-FPM), dan bisa bekerja secara lebih efisien untuk menangani beban tinggi—misalnya membangun server web residen di memori, penanganan tugas asinkron, layanan komunikasi real-time seperti WebSocket, dan banyak lagi.
Fitur utama Swoole:
- Kinerja Tinggi: Implementasi C di level bawah, mendukung I/O asinkron, multi-proses, dan multi-thread.
- Coroutine: Mendukung coroutine ringan sehingga eksekusi asinkron tetap terlihat seperti kode sinkron, menyederhanakan gaya pemrograman asinkron.
- Mendukung Banyak Protokol: Secara bawaan mendukung berbagai protokol seperti TCP, UDP, HTTP, WebSocket, dan lainnya.
- Mudah Digunakan: API yang simple dan ramah untuk developer PHP.
- Residen di Memori: Aplikasi dapat berjalan sebagai proses yang selalu aktif, sehingga tidak perlu inisialisasi ulang pada setiap permintaan seperti pada aplikasi PHP tradisional.
Dengan Swoole, PHP berevolusi dari sekadar bahasa scripting untuk web menjadi solusi bagi aplikasi jaringan berkinerja tinggi dengan skala luas.
Mengaktifkan Swoole di ServBay
Salah satu tujuan utama desain ServBay adalah memudahkan developer mengelola dan menggunakan berbagai ekstensi PHP. Karena Swoole telah menjadi ekstensi penting untuk pengembangan PHP modern, ServBay sudah menyertakannya secara bawaan. Anda hanya perlu beberapa langkah simpel untuk mengaktifkannya.
Persyaratan:
- ServBay sudah terinstal dan berjalan.
- Setidaknya satu versi PHP sudah diinstal di ServBay.
Langkah-langkah Mengaktifkan Swoole:
- Buka antarmuka aplikasi ServBay.
- Arahkan ke menu “Packages” atau pengelolaan versi PHP. (Catatan: Nama menu bisa berbeda tergantung versi ServBay, umumnya ada di menu utama atau pengaturan)
- Pilih versi PHP yang ingin Anda aktifkan untuk Swoole.
- Cari opsi ekstensi Swoole lalu aktifkan. Di ServBay, biasanya daftar ekstensi ditampilkan dalam bentuk checklist atau saklar.
- Simpan perubahan dan restart ServBay atau servis PHP sesuai petunjuk. ServBay akan otomatis menyesuaikan konfigurasi PHP agar mengaktifkan ekstensi Swoole.
Setelah langkah-langkah di atas selesai, Anda sudah bisa memanfaatkan Swoole di versi PHP terpilih. Anda dapat menjalankan perintah php -m
di terminal untuk memastikan Swoole terdaftar dalam ekstensi yang terpasang.
TIP
ServBay secara default merekomendasikan agar website dan file proyek Anda disimpan di direktori /Applications/ServBay/www
— dengan begitu, pengelolaan situs web berjalan lebih mudah. Contoh di artikel ini juga mengikuti struktur tersebut.
Membangun Server HTTP Sederhana dengan Swoole
Selanjutnya, mari kita buat server HTTP Swoole sederhana untuk mendemonstrasikan cara menangani permintaan web.
Langkah 1: Buat Direktori Proyek
Buka terminal, lalu buat dan masuki folder projek baru sesuai rekomendasi ServBay:
bash
cd /Applications/ServBay/www
mkdir servbay-swoole-http
cd servbay-swoole-http
1
2
3
2
3
Langkah 2: Tulis Skrip Server
Di dalam folder servbay-swoole-http
, buat file bernama server.php
dan masukkan kode berikut:
php
<?php
use Swoole\Http\Server;
use Swoole\Http\Request;
use Swoole\Http\Response;
// Membuat instance server HTTP Swoole
// Mendengarkan pada semua interface jaringan (0.0.0.0) di port 9501
$server = new Server("0.0.0.0", 9501);
// Daftarkan event handler 'start'
// Terpicu ketika server berhasil dijalankan
$server->on("start", function (Server $server) {
echo "Swoole HTTP server is started at http://0.0.0.0:9501\n";
// Bisa digunakan untuk mencatat PID utama, PID manager, dll
});
// Daftarkan handler untuk event 'request'
// Terpicu setiap menerima request HTTP baru
$server->on("request", function (Request $request, Response $response) {
// Set header response
$response->header("Content-Type", "text/plain");
// Logika penanganan berdasarkan path atau parameter permintaan
$path = $request->server['request_uri'] ?? '/';
$content = "Hello ServBay!";
if ($path === '/info') {
$content = "Request path: " . $path . "\n";
$content .= "Method: " . $request->server['request_method'] . "\n";
$content .= "Client IP: " . $request->server['remote_addr'] . "\n";
// Info permintaan lebih detail bisa diakses lewat objek $request
}
// Kirim response dan akhiri permintaan
$response->end($content);
});
// Memulai server
$server->start();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Skrip ini akan menjalankan server HTTP Swoole di port 9501. Saat menerima permintaan, server mengeluarkan respon teks sederhana "Hello ServBay!". Jika Anda mengakses path /info
, server juga akan menampilkan detail permintaan.
Langkah 3: Jalankan Server Swoole
Pastikan posisi direktori terminal Anda ada di servbay-swoole-http
. Jalankan skrip menggunakan versi PHP ServBay yang sudah mengaktifkan Swoole:
bash
php server.php
1
Jika berhasil, Anda akan melihat keluaran seperti ini di terminal:
bash
Swoole HTTP server is started at http://0.0.0.0:9501
1
Artinya server HTTP Swoole sudah berjalan di latar belakang dan siap menerima sambungan di port 9501.
Langkah 4: Mengakses Server Swoole
Buka browser web Anda dan kunjungi:
http://localhost:9501
http://localhost:9501/info
Anda akan melihat “Hello ServBay!” atau informasi permintaan ditampilkan di halaman.
Untuk menghentikan server, kembali ke terminal yang menjalankan skrip dan tekan Ctrl + C
.
Menangani Koneksi WebSocket dengan Swoole
Swoole secara native juga mendukung protokol WebSocket, sangat cocok membangun aplikasi real-time seperti chat, game server, atau push data langsung ke client.
Langkah 1: Buat Skrip Server WebSocket
Di dalam folder /Applications/ServBay/www/servbay-swoole-http
(atau Anda bisa buat folder lain, misal servbay-swoole-websocket
), buat file bernama websocket_server.php
dan tambahkan kode berikut:
php
<?php
use Swoole\WebSocket\Server;
use Swoole\Http\Request;
use Swoole\WebSocket\Frame;
// Membuat instance server WebSocket Swoole
// Server WebSocket juga bisa menangani request HTTP
$server = new Server("0.0.0.0", 9502); // Listen di port 9502
// Registrasi event 'start', terjadi saat server dinyalakan
$server->on("start", function (Server $server) {
echo "Swoole WebSocket server is started at ws://0.0.0.0:9502\n";
});
// Registrasi event 'open'
// Terpicu saat ada koneksi WebSocket baru
// $request menyimpan info koneksi client, misal $request->fd adalah file descriptor client
$server->on("open", function (Server $server, Request $request) {
echo "connection open: {$request->fd}\n";
// Kirim pesan sambutan ke client
$server->push($request->fd, "Welcome to ServBay WebSocket Demo!");
});
// Registrasi event 'message'
// Terpicu saat server menerima pesan WebSocket dari client
// $frame menyimpan info pesan, $frame->data isi pesan, $frame->fd client yang mengirim
$server->on("message", function (Server $server, Frame $frame) {
echo "received message from {$frame->fd}: {$frame->data}\n";
// Kirimkan balasan atau broadcast ke semua client
// Contoh: reply ke pengirim
$server->push($frame->fd, "Hello, you sent: {$frame->data}");
// Contoh broadcast (perlu maintain daftar koneksi atau iterasi manual)
// foreach ($server->connections as $fd) {
// if ($fd != $frame->fd) { // Tidak dikirim ke pengirim
// $server->push($fd, "User {$frame->fd} says: {$frame->data}");
// }
// }
});
// Registrasi event 'close'
// Terpicu saat koneksi client ditutup
$server->on("close", function ($ser, $fd) {
echo "connection close: {$fd}\n";
});
// Menyalakan server
$server->start();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Skrip ini membuat server WebSocket Swoole di port 9502. Beberapa callback didaftarkan untuk event penting: start
(server berjalan), open
(masuk koneksi baru), message
(terima pesan), dan close
(koneksi ditutup). Untuk setiap pesan yang masuk, server membalas pesan dengan prefiks tertentu ke client yang mengirim.
Langkah 2: Jalankan Server WebSocket
Pastikan terminal Anda berada di direktori yang tepat sesuai tempat file websocket_server.php
disimpan. Jalankan dengan versi PHP ServBay yang sudah mengaktifkan Swoole:
bash
php websocket_server.php
1
Jika berjalan dengan benar, output di terminal akan seperti ini:
bash
Swoole WebSocket server is started at ws://0.0.0.0:9502
1
Server WebSocket Swoole siap menerima koneksi di port 9502.
Langkah 3: Hubungkan ke Server WebSocket
Anda bisa melakukan pengujian koneksi WebSocket menggunakan beberapa cara berikut.
Metode A: Lewat Developer Tools pada Browser
Hampir semua browser modern memiliki Developer Tools (tekan F12), yang di dalamnya terdapat “Network” atau “Console” untuk uji koneksi WebSocket.
Buka halaman kosong (cth.
about:blank
).Buka Developer Tools, lalu tab “Console”.
Tempelkan kode JavaScript berikut untuk membuat koneksi:
javascriptvar ws = new WebSocket("ws://localhost:9502"); ws.onopen = function(event) { console.log("WebSocket connection opened:", event); ws.send("Hello from Browser!"); // Kirim pesan setelah terhubung }; ws.onmessage = function(event) { console.log("Message from server:", event.data); // Terima pesan dari server }; ws.onerror = function(event) { console.error("WebSocket error:", event); // Jika ada error }; ws.onclose = function(event) { console.log("WebSocket connection closed:", event); // Koneksi terputus }; // Bisa kirim pesan via ws.send("pesan anda") // Tutup koneksi dengan ws.close()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21Jalankan kode di konsol, amati hasilnya, dan lihat juga output di terminal yang menjalankan
websocket_server.php
.
Metode B: Menggunakan CLI wscat
wscat
adalah alat WebSocket client berbasis Node.js untuk terminal, sangat praktis.
Pasang
wscat
: Pastikan Node.js dan npm sudah terinstal. Lalu install wscat secara global:bashnpm install -g wscat
1Sambungkan ke server WebSocket: Jalankan perintah berikut di terminal:
bashwscat -c ws://localhost:9502
1Setelah tersambung, Anda akan melihat prompt
>
.Kirim pesan: Ketik pesan di prompt lalu tekan Enter, misalnya:
bash> Hello ServBay via wscat
1Server akan merespon. Balasan dari server ditampilkan dengan awalan
<
:bash< Hello, you sent: Hello ServBay via wscat
1Sementara di terminal server, output log untuk pesan masuk juga terlihat.
Untuk memutus koneksi, cukup tekan Ctrl + C
di terminal wscat
.
Hal-hal yang Perlu Diperhatikan
- Konflik Port: Pastikan port server Swoole (misal 9501 atau 9502) tidak sedang digunakan oleh program lain. Jika terjadi konflik port, server tidak bisa berjalan.
- Versi PHP: Yakinkan Anda menjalankan skrip menggunakan PHP ServBay yang sudah mengaktifkan Swoole. Cek versi PHP dengan
php -v
, atau gunakan utilitas command-line ServBay untuk mengganti versi. - Status Ekstensi: Jika server gagal dijalankan, cek ulang apakah ekstensi Swoole sudah aktif pada versi PHP yang digunakan, dan restart ServBay atau servis PHP jika diperlukan.
- Manajemen Proses Residen: Server Swoole adalah proses residen di memori. Untuk deployment produksi, gunakan process manager (Supervisor, Systemd, pm2, dsb.) agar proses Swoole bisa otomatis restart jika ada kegagalan. Untuk kebutuhan pengembangan lokal di ServBay, jalankan langsung lewat terminal biasanya sudah cukup.
Kesimpulan
Dengan ServBay, Anda bisa dengan mudah mengaktifkan dan memakai ekstensi Swoole untuk membangun serta menguji aplikasi PHP berkinerja tinggi secara lokal–baik untuk layanan HTTP tradisional maupun aplikasi komunikasi real-time via WebSocket. Kekuatan Swoole, dikombinasikan kemudahan lingkungan pengembangan yang ditawarkan ServBay, membuka peluang baru bagi developer PHP untuk menghadirkan aplikasi yang lebih cepat, kuat, dan efisien. Yuk coba Swoole di ServBay sekarang juga!