Membangun dan Menjalankan Aplikasi Workerman di ServBay
Ringkasan
Dokumen ini bertujuan untuk membantu pengguna ServBay dalam membangun dan menjalankan aplikasi jaringan asinkron PHP berkinerja tinggi berbasis Workerman di lingkungan pengembangan lokal macOS dan Windows. Dengan integrasi PHP dan Composer bawaan ServBay, proses setup aplikasi Workerman menjadi sangat mudah dan efisien. Workerman sendiri adalah pustaka PHP yang kuat untuk membangun layanan jaringan dengan kebutuhan penanganan koneksi serentak dalam jumlah besar—cocok untuk server Web, komunikasi real-time, game, dan lainnya. Melalui ServBay, Anda mendapatkan platform pengembangan yang siap pakai dan menyederhanakan proses konfigurasi Workerman.
Apa Itu Workerman?
Workerman adalah framework komunikasi jaringan asinkron open-source berkinerja tinggi yang sepenuhnya ditulis dalam PHP. Berdasarkan mekanisme EventLoop yang memanfaatkan I/O non-blocking, Workerman mampu menangani ribuan koneksi secara bersamaan. Berbeda dengan model tradisional pengembangan web PHP (seperti Apache/Nginx + PHP-FPM), aplikasi Workerman berjalan secara resident (proses tidak langsung dimatikan setelah permintaan selesai), mendengarkan port tertentu untuk melayani koneksi dan data jaringan secara langsung—sehingga overhead pemrosesan berulang dihindari dan performa meningkat signifikan.
Dengan Workerman, developer dapat dengan mudah membangun:
- Server HTTP berkinerja tinggi, bahkan dapat menggantikan Apache/Nginx untuk permintaan sederhana.
- Server WebSocket real-time: ideal untuk chat, push data real-time, dsb.
- Server TCP/UDP dengan protokol khusus.
- Alat command-line, scheduler, microservices, dan sebagainya.
Fitur Utama & Keunggulan Workerman
- Performa tinggi: Berbasis event-driven dan I/O asinkron non-blocking, mampu menangani jutaan koneksi konkuren.
- Multi-protokol: Mendukung HTTP, WebSocket, TCP, UDP, dan protokol custom.
- Mudah digunakan: API sederhana, memudahkan developer PHP memulai pemrograman jaringan asinkron.
- Fleksibel & scalable: Model multi-proses memaksimalkan CPU multi-core dan memudahkan balancing. Integrasi Composer serta pustaka PHP lain pun seamless.
- Terintegrasi ekosistem PHP: Pengelolaan dependensi lewat Composer—mudah dan konsisten.
- Mode daemon: Mendukung run di background—ideal untuk deployment production dan memastikan layanan tetap berjalan.
Workerman membuka peluang baru bagi pengembang PHP untuk membangun aplikasi jaringan real-time, concurrent, dan berskala besar.
Menyiapkan Lingkungan Workerman di ServBay
ServBay adalah solusi pengembangan lokal all-in-one bagi developer web, dengan runtime untuk PHP, Node.js, Python, Go, Java, serta server/database populer: Caddy, Nginx, Apache, MySQL, PostgreSQL, MongoDB, Redis, Memcached, dsb. Keunggulannya—ServBay siap pakai dan Composer sudah terkonfigurasi dari awal, sehingga proses instalasi Workerman jadi mudah.
Panduan ini akan menunjukkan cara membangun dan menjalankan aplikasi Workerman di ServBay dengan beberapa contoh dasar: server HTTP, WebSocket, dan TCP.
TIP
Agar pengelolaan proyek lebih konsisten, ServBay menyarankan semua file proyek website lokal disimpan di direktori berikut:
- macOS:
/Applications/ServBay/www
- Windows:
C:\ServBay\www
Seluruh contoh path di panduan ini menggunakan direktori tersebut.
Prasyarat
Pastikan hal berikut sebelum mulai:
- ServBay telah terinstal dan berjalan: Unduh versi terbaru dari situs resmi ServBay dan lakukan instalasi.
- PHP di ServBay telah diaktifkan: Pada panel kontrol ServBay, aktifkan versi PHP yang akan digunakan. Workerman membutuhkan PHP minimal 5.4—disarankan versi 7.x/8.x untuk performa terbaik.
- Dasar PHP dan Command Line: Untuk mengikuti panduan, Anda perlu memahami sintaks PHP dan cara menggunakan terminal/command line.
Instalasi Workerman
1. Pastikan Composer Tersedia
Composer sudah terintegrasi dalam ServBay—tidak perlu instalasi tambahan. Pastikan ServBay aktif dan versi PHP yang diinginkan sudah dinyalakan. ServBay otomatis mengatur Composer sesuai PHP yang dipilih. Buka terminal ServBay atau eksternal (jika PATH Composer sudah ditambahkan oleh ServBay) untuk mengakses Composer.
Verifikasi Composer dengan:
bash
composer -v
1
Jika Composer tersedia di lingkungan PHP ServBay, versi Composer akan muncul. Jika tidak, cek apakah ServBay sudah berjalan dan PHP aktif.
2. Buat Directory Proyek
Arahkan ke direktori utama situs ServBay, buat folder proyek baru, lalu masuk ke sana:
macOS:
bash
cd /Applications/ServBay/www
mkdir servbay-workerman-demo
cd servbay-workerman-demo
1
2
3
2
3
Windows:
cmd
cd C:\ServBay\www
mkdir servbay-workerman-demo
cd servbay-workerman-demo
1
2
3
2
3
Folder servbay-workerman-demo
akan digunakan untuk proyek Workerman Anda.
3. Instal Workerman via Composer
Di folder proyek, jalankan Composer untuk menginstall pustaka Workerman—Composer akan mengatur dependensi otomatis:
Path proyek:
- macOS:
/Applications/ServBay/www/servbay-workerman-demo
- Windows:
C:\ServBay\www\servbay-workerman-demo
bash
composer require workerman/workerman
1
Workerman dan semua dependensinya akan terinstall di folder vendor
.
Membuat Kode Server HTTP Workerman
Server HTTP adalah salah satu aplikasi Workerman paling mendasar—bisa digunakan untuk web atau API.
Di folder proyek, buat file http_server.php
(atau nama lain sesuai keinginan—misal server.php
), lalu masukkan kode PHP berikut:
php
<?php
// Mengimpor autoload Composer, agar kelas Workerman dapat digunakan
require __DIR__ . '/vendor/autoload.php';
// Import kelas Worker dari Workerman
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
use Workerman\Protocols\Http\Response;
// Membuat Worker untuk mendengarkan protokol & address yang dipilih
// 'http://0.0.0.0:8080' berarti server HTTP di semua interface pada port 8080
// 0.0.0.0 memungkinkan akses dari localhost maupun perangkat jaringan lain; 8080 adalah nomor port yang didengar.
$http_worker = new Worker('http://0.0.0.0:8080');
// Menentukan jumlah proses Worker
// Contoh: 4 (empatin proses PHP handling request)—sesuaikan dengan jumlah core CPU
$http_worker->count = 4;
// Mendefinisikan logika saat menerima pesan dari klien (request HTTP)
// $connection = objek koneksi untuk respon ke klien
// $request = konteks request HTTP (URL, Headers, Body, dll)
$http_worker->onMessage = function(TcpConnection $connection, Request $request) {
// Kirim string sederhana sebagai respon HTTP ke klien
// Protokol HTTP otomatis meng-handle header dan detail respon lain
$connection->send(new Response(200, [], 'Hello ServBay Workerman HTTP Server!'));
};
// Menjalankan semua instance Worker
// Ini event-loop utama Workerman—setelah berjalan, port akan didengarkan dan event diproses
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 kelas Workerman aktif.use Workerman\...;
: Mengimpor kelas yang diperlukan.new Worker('http://0.0.0.0:8080')
: Worker baru untuk protokol HTTP & port yang ditentukan.$http_worker->count = 4;
: Jumlah proses—bisa disesuaikan untuk memanfaatkan multicore.$http_worker->onMessage = function(TcpConnection $connection, Request $request) { ... };
: Callback ketika permintaan HTTP diterima—$connection untuk reply, $request untuk membaca detail permintaan.Worker::runAll();
: Memulai event-loop Workerman dan mulai menerima koneksi.
Menjalankan Server HTTP Workerman
Di directory proyek, jalankan server HTTP dengan:
Path proyek:
- macOS:
/Applications/ServBay/www/servbay-workerman-demo
- Windows:
C:\ServBay\www\servbay-workerman-demo
bash
php http_server.php start
1
Mode Running:
- Foreground: Jalankan
php http_server.php start
, server jalan di depan layar & log tampil di terminal. Stop denganCtrl+C
. Cocok untuk development/testing. - Daemon (Background): Untuk production, bisa dijalankan background dengan
-d
:bashWorkerman akan berjalan di background dan output masuk ke log file.php http_server.php start -d
1
Manajemen Proses:
Workerman menyediakan perintah pengelolaan proses mudah:
- Start:
php http_server.php start
(foreground) /php http_server.php start -d
(daemon) - Stop:
php http_server.php stop
(graceful shutdown setelah proses selesai) - Restart:
php http_server.php restart
(stop lalu start ulang) - Reload (smooth restart):
php http_server.php reload
(proses restarting satu per satu, service tetap berjalan—perhatikan penggunaan lifecycle function sepertionWorkerStart
) - Cek status:
php http_server.php status
(lihat status, penggunaan memori, koneksi, dsb.)
Setelah server aktif, buka browser ke http://localhost:8080
atau http://127.0.0.1:8080
—akan muncul output Hello ServBay Workerman HTTP Server!
.
Membuat Server WebSocket dengan Workerman
WebSocket memungkinkan koneksi dua arah persistensi antara klien-server, cocok untuk aplikasi real-time seperti chat, live feed, game, dsb. Workerman mendukung WebSocket secara native.
Buat Kode Server WebSocket
Di direktori proyek, buat file
websocket_server.php
dan masukkan kode berikut:php<?php require __DIR__ . '/vendor/autoload.php'; use Workerman\Worker; use Workerman\Connection\TcpConnection; // Membuat instance server WebSocket di port 8081 // 'websocket://0.0.0.0:8081' artinya server WebSocket aktif di semua interface // Workerman otomatis meng-handle handshake WebSocket $ws_worker = new Worker('websocket://0.0.0.0:8081'); // Jalankan 4 proses untuk melayani koneksi $ws_worker->count = 4; // Logika saat koneksi baru dibuat // Trigger ketika klien terhubung $ws_worker->onConnect = function(TcpConnection $connection) { echo "Koneksi WebSocket baru dari " . $connection->getRemoteIp() . "\n"; }; // Logika saat pesan diterima dari klien // $data: pesan yang diterima, sudah didekode $ws_worker->onMessage = function(TcpConnection $connection, $data) { echo "Pesan diterima: " . $data . "\n"; // Balas pesan dengan echo ke klien $connection->send('ServBay Workerman menerima: ' . $data); }; // Logika ketika koneksi ditutup $ws_worker->onClose = function(TcpConnection $connection) { echo "Koneksi WebSocket ditutup\n"; }; // Logika ketika terjadi error (opsional) $ws_worker->onError = function(TcpConnection $connection, $code, $msg) { echo "Error: $code - $msg\n"; }; // Jalankan semua instance 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
41Menjalankan Server WebSocket
Di folder proyek, jalankan:
bashphp websocket_server.php start
1Bisa juga dijalankan background dengan
-d
. Setelah aktif, Anda bisa menghubungkan dari klien WebSocket kews://localhost:8081
.Contoh pengujian dengan JavaScript di browser console:
javascriptvar ws = new WebSocket("ws://localhost:8081"); ws.onopen = function(event) { console.log("Koneksi WebSocket terbuka"); ws.send("Halo dari Browser!"); // Kirim pesan }; ws.onmessage = function(event) { console.log("Pesan dari server:", event.data); // Terima pesan }; ws.onclose = function(event) { if (event.wasClean) { console.log("Koneksi WebSocket ditutup dengan baik, code=" + event.code + " reason=" + event.reason); } else { console.error("Koneksi WebSocket mati"); } }; ws.onerror = function(error) { console.error("Error WebSocket:", error); }; // Tutup koneksi (opsional) // 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
25Jika koneksi sukses, Anda akan melihat log koneksi dan pesan pada terminal serta browser.
Membuat Server TCP dengan Workerman
Workerman juga bisa digunakan untuk membangun server TCP umum—ideal untuk backend game, platform IoT, komunikasi custom, dsb.
Buat Kode Server TCP
Di folder proyek, buat file
tcp_server.php
dan tambahkan kode berikut: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 server TCP aktif di port 8082 semua interface // Workerman default pakai protokol teks (baris '\n'), bisa custom sesuai kebutuhan $tcp_worker = new Worker('tcp://0.0.0.0:8082'); // Jalankan 4 proses untuk melayani koneksi $tcp_worker->count = 4; // Logika ketika koneksi baru dibuat $tcp_worker->onConnect = function(TcpConnection $connection) { echo "Koneksi TCP baru dari " . $connection->getRemoteIp() . "\n"; // Kirim welcome message saat koneksi terbentuk $connection->send("Selamat datang di ServBay Workerman TCP Server!\n"); }; // Logika saat data diterima dari klien // $data = data TCP asli (hasil parsing protokol) $tcp_worker->onMessage = function(TcpConnection $connection, $data) { echo "Data diterima: " . $data; // Balas data yang diterima $connection->send('ServBay Workerman menerima: ' . $data); }; // Logika ketika koneksi ditutup $tcp_worker->onClose = function(TcpConnection $connection) { echo "Koneksi TCP ditutup\n"; }; // Jalankan semua instance 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 folder proyek, jalankan:
bashphp tcp_server.php start
1Bisa dijalankan background dengan
-d
. Gunakan klien TCP (misal, telnet atau nc) untuk menghubungkan kelocalhost:8082
.Contoh:
bash# Menggunakan telnet telnet localhost 8082 # atau menggunakan nc (netcat) nc localhost 8082
1
2
3
4
5Setelah terhubung, Anda akan melihat pesan selamat datang—ketik teks dan tekan enter, server akan mengirim kembali pesan echo.
Hal Penting dan Penyelesaian Masalah
- Port Terpakai: Pastikan port (8080, 8081, 8082) tidak digunakan oleh aplikasi ServBay atau macOS lain—jika port terpakai, Workerman gagal start. Cek dengan perintah
lsof -i :nomor_port
. - Firewall: Firewall OS bisa membatasi akses eksternal ke port ini. Untuk akses antar perangkat di jaringan, pastikan aturan firewall OS sudah diatur.
- Integrasi dengan ServBay Web Server: Workerman berjalan di port sendiri, terpisah dari Caddy/Nginx di ServBay—proses dan layanan independent. Aplikasi Workerman langsung menangani koneksi, bukan lewat proxy (kecuali ada reverse proxy khusus). Workerman cocok untuk aplikasi long-connected/asynchronous (chat, dsb.), sementara Caddy/Nginx lebih untuk HTTP request tradisional.
- Versi PHP: Pastikan PHP yang dipakai di ServBay sesuai minimum Workerman (5.4+). ServBay support multi PHP version—pilih via panel sesuai kebutuhan.
- Ekstensi: Beberapa ekstensi PHP meningkatkan performa Workerman, misal
event
,posix
,pcntl
. ServBay umumnya mengaktifkan ekstensi ini, tapi cek via panel jika ada kendala. - Log File: Untuk mode daemon, output Workerman masuk log file—cek log secara berkala untuk monitoring dan error detection.
FAQ (Pertanyaan Umum)
- Q: Bagaimana cara stop server Workerman?
- A: Jika berjalan di foreground (
start
), tekanCtrl+C
pada terminal. Untuk mode daemon/backgroud (start -d
), gunakanphp your_server_file.php stop
di folder proyek.
- A: Jika berjalan di foreground (
- Q: Mengapa server Workerman gagal berjalan?
- A: Penyebab umum: port sudah digunakan. Lihat pesan error di terminal—biasanya disebutkan port conflict. Coba gunakan port lain, atau matikan aplikasi lain di port itu. Gunakan
lsof -i :nomor_port
untuk cek proses yang memakai port.
- A: Penyebab umum: port sudah digunakan. Lihat pesan error di terminal—biasanya disebutkan port conflict. Coba gunakan port lain, atau matikan aplikasi lain di port itu. Gunakan
- Q: Apa beda Caddy/Nginx ServBay dengan Workerman? Harus pakai yang mana?
- A: Caddy/Nginx adalah web server tradisional untuk request HTTP(S), biasanya bersama PHP-FPM (proses PHP keluar setelah satu request). Workerman framework asinkron yang bisa jadi HTTP server sendiri, serta untuk WebSocket/TCP—asynchronous, persistent. Untuk standar website atau REST API, Caddy/Nginx lebih umum. Untuk chat/game/IOT dengan real-time, Workerman lebih cocok. Bisa dikombinasi, misal, Caddy/Nginx menjadi reverse proxy ke aplikasi Workerman.
- Q: Bisakah menjalankan beberapa aplikasi Workerman bersamaan di ServBay?
- A: Bisa. Setiap aplikasi Workerman jalan di proses PHP tersendiri dan port terpisah. Buat script start masing-masing dan jalankan di terminal menyendiri (foreground maupun background), pastikan masing-masing pakai port berbeda.
Kesimpulan
Dengan panduan ini, Anda sudah memahami cara membangun dan menjalankan aplikasi Workerman di lingkungan ServBay dengan efisien. Workerman memberi keunggulan performa dan model asinkron—ideal untuk membangun aplikasi jaringan PHP generasi berikutnya. Ekosistem Composer dan PHP siap pakai ServBay menghemat waktu setup, sehingga Anda dapat fokus pada logika bisnis aplikasi Workerman. Baik untuk web/API berkinerja tinggi maupun interaksi real-time via WebSocket, ServBay adalah pasangan ideal untuk eksplorasi dan pengembangan Workerman. Selamat mencoba dan semoga sukses!