Membangun dan Menjalankan Aplikasi Workerman di ServBay
Ringkasan
Dokumen ini ditujukan untuk membimbing pengguna ServBay dalam membangun dan menjalankan aplikasi jaringan asinkron berkinerja tinggi berbasis Workerman di lingkungan pengembangan macOS lokal, dengan memanfaatkan integrasi PHP serta Composer di ServBay. Workerman adalah pustaka PHP yang sangat kuat, cocok untuk membangun berbagai layanan jaringan yang membutuhkan penanganan concurrency besar, seperti server Web, server komunikasi real-time, server game, dan lain-lain. ServBay menyediakan platform pengembangan siap pakai yang secara signifikan menyederhanakan proses konfigurasi lingkungan untuk Workerman.
Apa Itu Workerman?
Workerman adalah framework komunikasi jaringan asinkron berkinerja tinggi open source, sepenuhnya ditulis dengan PHP. Berdasarkan mekanisme EventLoop (perulangan event), framework ini menerapkan I/O asinkron non-blocking untuk menangani banyak koneksi bersamaan secara efisien. Berbeda dengan model pengembangan PHP tradisional (seperti Apache/Nginx + PHP-FPM), aplikasi Workerman biasanya berjalan secara permanen di memori, mendengarkan port tertentu, dan langsung menangani koneksi serta data jaringan. Cara ini menghindari overhead yang terjadi pada model tradisional, di mana proses dihancurkan usai permintaan selesai ditangani. Alhasil, Workerman dapat meningkatkan performa dan throughput secara signifikan.
Dengan Workerman, developer dapat dengan mudah membangun:
- Server HTTP berkinerja tinggi, bahkan bisa menggantikan Apache/Nginx untuk menangani permintaan statis atau dinamis yang sederhana.
- Server WebSocket real-time, untuk aplikasi seperti chat room, push data real-time, dan sebagainya.
- Server TCP/UDP dengan protokol kustom.
- Tools command line, jadwal tugas (cron), layanan microservice, dan lain-lain.
Fitur Inti dan Keunggulan Workerman
- Performa Tinggi: Berbasis event-driven dan I/O asinkron non-blocking untuk menangani banyak sekali koneksi secara simultan dengan performa luar biasa.
- Dukungan Multi-Protokol: Native support untuk HTTP, WebSocket, TCP, UDP, dan protokol jaringan populer lainnya, serta antarmuka fleksibel untuk implementasi protokol kustom.
- Mudah Dipakai: API yang sederhana dan intuitif sehingga memudahkan PHP developer memulai pemrograman jaringan asinkron tanpa beban kompleksitas.
- Ekspansi Fleksibel: Mendukung model multi-proses untuk memanfaatkan CPU multi-core secara optimal, serta load balancing horizontal. Mudah integrasi dengan paket Composer dan pustaka PHP lainnya.
- Terintegrasi dalam Ekosistem PHP: Sebagai pustaka PHP, Workerman terhubung erat dengan ekosistem PHP, memungkinkan pengelolaan dependensi via Composer dengan lancar.
- Mode Daemon: Mendukung mode daemon agar dapat berjalan stabil di latar belakang, cocok untuk deployment production yang menuntut layanan uptime tinggi.
Workerman membuka peluang bagi developer PHP untuk membangun aplikasi jaringan real-time dan berkinerja tinggi.
Membangun Lingkungan Pengembangan Workerman dengan ServBay
ServBay adalah tool lingkungan pengembangan lokal yang dirancang khusus untuk web developer, memadukan runtime dari PHP, Node.js, Python, Go, Java, bersama server dan database populer seperti Caddy, Nginx, Apache, MySQL, PostgreSQL, MongoDB, Redis, Memcached, dan lainnya. Keunggulan utama ServBay adalah konsep “siap pakai”, terlebih dengan Composer yang telah terintegrasi dan dikonfigurasikan untuk masing-masing PHP versi. Ini memudahkan setup dan percobaan Workerman dalam ServBay.
Panduan berikut akan menunjukkan beberapa contoh sederhana untuk membangun dan menjalankan aplikasi Workerman di lingkungan ServBay: HTTP server, WebSocket server, dan TCP server.
TIP
Agar mudah dikelola dan sesuai standar, ServBay menyarankan agar seluruh berkas proyek situs lokal disimpan di direktori /Applications/ServBay/www
. Seluruh contoh path proyek dalam dokumen ini menggunakan direktori tersebut.
Prasyarat
Sebelum mulai, pastikan Anda telah memenuhi syarat berikut:
- ServBay telah diinstal dan berjalan dengan baik: Unduh dan instal versi terbaru ServBay melalui Situs Resmi ServBay.
- PHP pada ServBay sudah diaktifkan: Di panel kontrol ServBay, pastikan versi PHP yang ingin dipakai sudah diaktifkan. Workerman membutuhkan minimal PHP 5.4; direkomendasikan PHP 7.x atau 8.x untuk performa maksimal.
- Memahami dasar pemrograman PHP dan perintah terminal: Anda sebaiknya familiar dengan sintaks PHP dasar dan penggunaan command line di terminal.
Instalasi Workerman
1. Pastikan Composer Tersedia
Composer sudah disertakan di ServBay, sehingga Anda tak perlu instalasi terpisah. Pastikan ServBay telah berjalan dan PHP versi yang dikehendaki telah diaktifkan. ServBay otomatis mengatur Composer untuk setiap versi PHP terkait. Anda dapat memakai terminal bawaan ServBay, atau terminal eksternal (jika ServBay sudah menambahkan PHP dan Composer ke PATH sistem) untuk mengakses Composer di lingkungan PHP dari ServBay.
Buka terminal dan jalankan perintah berikut untuk memeriksa ketersediaan Composer:
bash
composer -v
1
Jika Composer terinstal dan terkonfigurasi dengan benar, Anda akan melihat informasi versi Composer. Jika perintah tidak ditemukan, pastikan ServBay sedang berjalan dan PHP telah diaktifkan.
2. Membuat Direktori Proyek
Navigasi ke root situs sesuai rekomendasi ServBay, lalu buat dan masuk ke direktori proyek baru:
bash
cd /Applications/ServBay/www
mkdir servbay-workerman-demo
cd servbay-workerman-demo
1
2
3
2
3
Di sini kita membuat direktori bernama servbay-workerman-demo
untuk menampung seluruh file proyek Workerman.
3. Instal Workerman dengan Composer
Di dalam direktori proyek (/Applications/ServBay/www/servbay-workerman-demo
), instal pustaka Workerman menggunakan Composer (ini metode yang direkomendasikan karena Composer secara otomatis mengelola dependensi):
bash
composer require workerman/workerman
1
Composer akan mengunduh Workerman beserta dependensinya ke direktori vendor
pada folder ini.
Menulis Kode Server HTTP Workerman
Server HTTP adalah salah satu skenario Workerman yang paling banyak digunakan, cocok untuk membangun web aplikasi atau API dengan performa tinggi.
Buat file bernama http_server.php
(atau nama lain sesuai keinginan, seperti server.php
) di direktori proyek, lalu tambahkan kode PHP berikut:
php
<?php
// Memasukkan autoload Composer agar class Workerman dapat digunakan
require __DIR__ . '/vendor/autoload.php';
// Import class Worker dari Workerman
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
use Workerman\Protocols\Http\Response;
// Membuat instance Worker, menetapkan protokol dan alamat yang didengarkan
// 'http://0.0.0.0:8080' artinya membuat HTTP server yang mendengarkan pada seluruh interface (0.0.0.0) di port 8080
// 0.0.0.0 membolehkan akses dari localhost maupun perangkat lain dalam LAN; 8080 adalah nomor port yang digunakan
$http_worker = new Worker('http://0.0.0.0:8080');
// Menetapkan jumlah proses Worker
// Di sini di-set 4, artinya ada 4 proses PHP berjalan secara paralel untuk menangani request; sesuaikan dengan jumlah core CPU
$http_worker->count = 4;
// Mendefinisikan logika penanganan pesan dari client (request HTTP)
// $connection adalah objek koneksi aktif, digunakan untuk mengirim respon ke client
// $request berisi informasi permintaan (URL, Headers, Body, dsb)
$http_worker->onMessage = function(TcpConnection $connection, Request $request) {
// Mengirimkan string sederhana sebagai respon HTTP ke client
// Protokol HTTP di Workerman secara otomatis mengelola header dan detail lainnya
$connection->send(new Response(200, [], 'Hello ServBay Workerman HTTP Server!'));
};
// Menjalankan seluruh instance Worker
// Ini adalah loop utama Workerman; setelah dijalankan, Worker memulai proses mendengarkan port dan event
Worker::runAll();
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
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
Penjelasan Kode:
require __DIR__ . '/vendor/autoload.php';
: Memuat autoload Composer agar semua kelas Workerman (sepertiWorker
,Request
,Response
, dsb) siap dipakai.use Workerman\...;
: Import kelas yang dibutuhkan.new Worker('http://0.0.0.0:8080')
: Membuat instance Workerman dengan protokol dan alamat (di sini HTTP di port 8080 pada semua interface).$http_worker->count = 4;
: Menentukan jumlah proses. Lebih banyak proses = pemanfaatan core CPU lebih optimal => kapasitas concurrency lebih tinggi.$http_worker->onMessage = function(TcpConnection $connection, Request $request) { ... };
: Callback yang dijalankan saat Workerman menerima request HTTP.$connection
digunakan untuk membalas client,$request
berisi data permintaan.Worker::runAll();
: Memulai event loop utama yang menangani seluruh Worker yang sudah dibuat.
Menjalankan Server HTTP Workerman
Di direktori proyek (/Applications/ServBay/www/servbay-workerman-demo
), buka terminal dan jalankan perintah berikut untuk mulai menjalankan server HTTP:
bash
php http_server.php start
1
Penjelasan Mode Operasi:
- Mode Foreground (Depan Layar): Dengan
php http_server.php start
, Workerman berjalan di depan layar, menampilkan log langsung di terminal. Hentikan denganCtrl+C
. Mode ini cocok untuk development dan debugging. - Mode Daemon (Latar Belakang): Di environment produksi, gunakan opsi
-d
agar Workerman berjalan sebagai daemon:bashWorkerman berjalan di background, dan output dialihkan ke file log (secara default dalam direktori Workerman atau path yang ditentukan).php http_server.php start -d
1
Manajemen Proses:
Workerman menyediakan beberapa perintah manajemen proses yang praktis:
- Mulai:
php http_server.php start
(depan layar) atauphp http_server.php start -d
(latar belakang) - Stop:
php http_server.php stop
(menunggu seluruh request selesai dengan baik lalu keluar) - Restart:
php http_server.php restart
(menghentikan lalu memulai ulang) - Reload (Restart halus):
php http_server.php reload
(pembaruan kode dilakukan dengan restart bertahap pada tiap proses anak, tanpa memutus service. Perhatikan penggunaan event sepertionWorkerStart
) - Status:
php http_server.php status
(melihat status proses Workerman, penggunaan memori, jumlah koneksi, dsb)
Setelah server berjalan, buka browser dan kunjungi http://localhost:8080
atau http://127.0.0.1:8080
. Anda akan melihat teks Hello ServBay Workerman HTTP Server!
.
Membuat WebSocket Server dengan Workerman
WebSocket memungkinkan komunikasi dua arah yang menetap antara client dan server — cocok untuk aplikasi real-time seperti chat, update data, atau game. Workerman mendukung WebSocket dengan sangat baik.
Membuat Kode Server WebSocket
Buat file
websocket_server.php
di direktori proyek, lalu tambahkan kode berikut:php<?php require __DIR__ . '/vendor/autoload.php'; use Workerman\Worker; use Workerman\Connection\TcpConnection; // Membuat instance WebSocket server pada port 8081 // 'websocket://0.0.0.0:8081' = WebSocket server di seluruh interface port 8081 // Workerman secara otomatis menangani proses handshake WebSocket $ws_worker = new Worker('websocket://0.0.0.0:8081'); // Menjalankan 4 proses paralel $ws_worker->count = 4; // Logika saat koneksi baru terhubung // Dipicu ketika client baru terhubung ke server $ws_worker->onConnect = function(TcpConnection $connection) { echo "Koneksi WebSocket baru dari " . $connection->getRemoteIp() . "\n"; }; // Logika saat pesan diterima // Dipicu ketika server menerima pesan WebSocket dari client // $data adalah isi pesan dari client $ws_worker->onMessage = function(TcpConnection $connection, $data) { echo "Pesan diterima: " . $data . "\n"; // Mengirim balik pesan yang diterima ke client // $connection->send() otomatis mengemas jadi frame WebSocket $connection->send('ServBay Workerman menerima: ' . $data); }; // Logika saat koneksi ditutup // Dipicu saat client memutuskan koneksi $ws_worker->onClose = function(TcpConnection $connection) { echo "Koneksi WebSocket terputus\n"; }; // Logika saat terjadi error (opsional) $ws_worker->onError = function(TcpConnection $connection, $code, $msg) { echo "Error: $code - $msg\n"; }; // Menjalankan seluruh Worker Worker::runAll();
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
44Menjalankan Server WebSocket
Di direktori proyek, jalankan server WebSocket dengan perintah:
bashphp websocket_server.php start
1Anda juga dapat menambahkan
-d
untuk mode background. Setelah berjalan, gunakan klien WebSocket untuk menghubungkan kews://localhost:8081
.Contohnya, menggunakan JavaScript di Console browser:
javascriptvar ws = new WebSocket("ws://localhost:8081"); ws.onopen = function(event) { console.log("WebSocket connection opened"); ws.send("Hello from Browser!"); // Kirim pesan }; ws.onmessage = function(event) { console.log("Message from server:", event.data); // Terima pesan }; ws.onclose = function(event) { if (event.wasClean) { console.log("WebSocket connection closed cleanly, code=" + event.code + " reason=" + event.reason); } else { console.error("WebSocket connection died"); } }; ws.onerror = function(error) { console.error("WebSocket error:", error); }; // Tutup koneksi jika diperlukan // ws.close();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25Setelah terkoneksi, Anda akan melihat output informasi koneksi di terminal, menerima pesan dari server, dan browser akan menampilkan pesan balasan dari server.
Membuat Server TCP dengan Workerman
Workerman juga cocok untuk membangun server TCP umum yang menangani protokol aplikasi berbasis TCP, misal backend game, IoT, atau layanan komunikasi kustom.
Membuat Kode Server TCP
Buat file
tcp_server.php
pada direktori proyek, tambahkan kode:php<?php require __DIR__ . '/vendor/autoload.php'; use Workerman\Worker; use Workerman\Connection\TcpConnection; // Membuat server TCP di port 8082 // 'tcp://0.0.0.0:8082' artinya TCP server pada seluruh interface di port 8082 // Workerman secara default memakai protokol Text (berakhir dengan '\n'), namun bisa di-set ke protokol lain atau custom $tcp_worker = new Worker('tcp://0.0.0.0:8082'); // 4 proses paralel $tcp_worker->count = 4; // Logika saat koneksi dibuka $tcp_worker->onConnect = function(TcpConnection $connection) { echo "Koneksi TCP baru dari " . $connection->getRemoteIp() . "\n"; // Kirim pesan selamat datang saat koneksi dibangun $connection->send("Selamat datang di ServBay Workerman TCP Server!\n"); }; // Logika saat pesan diterima // $data berisi data TCP mentah setelah parsing sesuai protokol $tcp_worker->onMessage = function(TcpConnection $connection, $data) { echo "Data diterima: " . $data; // Kirim echo pesan balik ke client $connection->send('ServBay Workerman menerima: ' . $data); }; // Logika saat koneksi ditutup $tcp_worker->onClose = function(TcpConnection $connection) { echo "Koneksi TCP terputus\n"; }; // Jalankan seluruh Worker Worker::runAll();
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
36Menjalankan Server TCP
Di direktori proyek, jalankan:
bashphp tcp_server.php start
1Mode background bisa dipakai dengan tambahan
-d
. Setelah berjalan, silakan koneksi menggunakan klien TCP kelocalhost:8082
.Contoh di macOS/Linux, buka terminal lain dan gunakan
telnet
ataunc
:bash# Menggunakan telnet telnet localhost 8082 # Atau dengan nc (netcat) nc localhost 8082
1
2
3
4
5Jika koneksi berhasil, Anda akan menerima pesan selamat datang dari server. Ketik teks dan tekan enter (mengikuti protokol Text), server akan mengembalikan (echo) pesan yang Anda kirim.
Hal-hal Penting
- Port Terduduki: Pastikan port yang digunakan Workerman (contoh: 8080, 8081, 8082) tidak sedang digunakan oleh aplikasi lain di macOS atau oleh layanan lain di ServBay. Jika port sudah digunakan, Workerman akan gagal dijalankan. Periksa dengan
lsof -i :nomor_port
. - Firewall: Firewall bawaan macOS mungkin memblokir akses ke port tersebut dari perangkat lain. Untuk pengembangan lokal biasanya bukan masalah, tapi jika ingin akses dari perangkat LAN, atur firewall macOS Anda.
- Hubungan dengan Web Server di ServBay: Workerman berjalan di port sendiri dan merupakan proses terpisah dari Caddy atau Nginx di ServBay. Workerman biasanya menangani koneksi langsung, bukan dari reverse proxy (kecuali diatur khusus). Workerman cocok untuk koneksi long-lived/high concurrency (seperti WebSocket). Sedangkan Caddy/Nginx lebih cocok untuk HTTP tradisional dengan koneksi singkat.
- Versi PHP: Pastikan versi PHP di ServBay sudah memenuhi syarat minimum Workerman. ServBay pra-instal banyak versi PHP; silakan pilih sesuai kebutuhan di panel kontrol ServBay.
- Ekstensi Tambahan: Workerman menggunakan ekstensi PHP tertentu untuk performa optimal, misal
event
(jika terinstal dan diaktifkan, performa jadi lebih tinggi), sertaposix
danpcntl
(untuk multi-proses). Sebagian besar ekstensi umum sudah aktif secara default di ServBay, tapi jika mengalami masalah tertentu, cek status ekstensi di panel kontrol ServBay. - Log: Pada mode daemon, output Workerman dialihkan ke file log — cek secara berkala untuk memonitor status aplikasi atau menelusuri error.
FAQ (Pertanyaan yang Sering Diajukan)
- Q: Bagaimana cara menghentikan server Workerman?
- A: Jika dijalankan di foreground (
start
), cukup tekanCtrl+C
di terminal. Jika dijalankan sebagai daemon (start -d
), masuk ke folder proyek dan gunakan perintahphp nama_file_server.php stop
untuk menghentikan.
- A: Jika dijalankan di foreground (
- Q: Mengapa server Workerman tidak bisa dijalankan?
- A: Sebab paling umum adalah port sudah digunakan aplikasi lain. Lihat error di terminal, biasanya jelas menyebutkan port occupied. Coba gunakan port lain atau hentikan aplikasi yang memakai port tersebut dulu, cek proses dengan
lsof -i :nomor_port
.
- A: Sebab paling umum adalah port sudah digunakan aplikasi lain. Lihat error di terminal, biasanya jelas menyebutkan port occupied. Coba gunakan port lain atau hentikan aplikasi yang memakai port tersebut dulu, cek proses dengan
- Q: Apa perbedaan antara Caddy/Nginx ServBay dengan Workerman? Kapan harus menggunakan yang mana?
- A: Caddy/Nginx adalah web server tradisional untuk HTTP/HTTPS, biasanya dengan PHP-FPM; tiap request bisa membuat proses PHP baru. Workerman adalah framework PHP asinkron yang bisa jadi HTTP server sendiri, juga WebSocket, TCP, dsb dengan model proses permanen di memori — cocok untuk beban tinggi, long-lived, atau real-time service. Pilih sesuai kebutuhan: web/RESTful API biasa = Caddy/Nginx; chat/game/IoT/real-time = Workerman. Anda bisa kombinasikan, misal Caddy/Nginx sebagai reverse proxy ke Workerman.
- Q: Bisakah saya menjalankan beberapa aplikasi Workerman sekaligus di ServBay?
- A: Bisa. Setiap aplikasi Workerman dijalankan pada proses PHP berbeda dan port berbeda. Tulis file startup sendiri untuk tiap aplikasi, jalankan di terminal berbeda (
php nama_app_server.php start
), pastikan tidak ada bentrok port.
- A: Bisa. Setiap aplikasi Workerman dijalankan pada proses PHP berbeda dan port berbeda. Tulis file startup sendiri untuk tiap aplikasi, jalankan di terminal berbeda (
Penutup
Dengan panduan ini, Anda telah mempelajari cara cepat membangun dan menjalankan proyek Workerman di lingkungan lokal efisien menggunakan ServBay. Workerman memberi PHP developer kekuatan untuk membangun aplikasi jaringan high-performance dan asinkron. Dengan Composer dan PHP siap pakai dari ServBay, Anda dapat menghemat waktu setup dan lebih fokus pada logika bisnis aplikasi. Mau membangun layanan web berperforma tinggi, aplikasi WebSocket real-time, atau proyek real-time lain, ServBay adalah partner lokal terbaik untuk mengembangkan Workerman. Semoga panduan ini dapat membantu Anda sukses menjelajahi dunia Workerman!