Membina & Menjalankan Aplikasi Workerman dalam ServBay
Pengenalan
Dokumen ini bertujuan membimbing pengguna ServBay cara untuk membina dan menjalankan aplikasi rangkaian asinkron berprestasi tinggi menggunakan Workerman dalam persekitaran pembangunan tempatan macOS dan Windows. Dengan PHP dan Composer yang terintegrasi dalam ServBay, anda boleh memulakan projek Workerman dengan pantas. Workerman merupakan perpustakaan PHP yang mantap untuk membangunkan pelayan web, aplikasi komunikasi masa nyata, pelayan permainan dan pelbagai perkhidmatan rangkaian yang memerlukan pemprosesan persamaan tinggi. ServBay menyediakan platform pembangunan “siap guna”, menjadikan konfigurasi Workerman menjadi lebih mudah dan efisien.
Apa itu Workerman?
Workerman ialah rangka kerja komunikasi rangkaian asinkron berprestasi tinggi dan bersumber terbuka, dibangunkan sepenuhnya dengan PHP. Menggunakan mekanisme EventLoop, Workerman melaksanakan I/O asinkron bukan penahan, membolehkan pemprosesan sambungan persamaan dalam jumlah besar secara efisien. Tidak seperti kaedah pembangunan web PHP tradisional (seperti gabungan Apache/Nginx dengan PHP-FPM), aplikasi Workerman berjalan secara resident (sentiasa aktif) dalam ingatan, mendengar port khusus dan mengendalikan rangkaian serta data secara langsung, mengelakkan kos proses yang musnah selepas setiap permintaan selesai dan meningkatkan kelajuan serta throughput dengan ketara.
Dengan Workerman, pembangun boleh membina dengan mudah:
- Pelayan HTTP berprestasi tinggi — boleh menggantikan Apache/Nginx untuk permintaan statik/dinamik sederhana.
- Pelayan WebSocket masa nyata untuk aplikasi seperti chat room, push data masa nyata dsb.
- Pelayan TCP/UDP dengan protokol khusus anda sendiri.
- Alat baris perintah, tugas berjadual, mikroservis dan lain-lain.
Ciri & Kelebihan Utama Workerman
- Prestasi Tinggi: Teras berasaskan pemacu peristiwa dengan I/O asinkron bukan penahan, mampu mengendalikan sambungan persamaan yang sangat banyak dengan prestasi hebat.
- Sokongan Multiprotokol: Menyokong pelbagai protokol utama seperti HTTP, WebSocket, TCP, UDP secara lalai, dengan antaramuka fleksibel untuk protokol tersuai.
- Mudah Digunakan: API yang ringkas dan jelas, menurunkan kompleksiti pengaturcaraan rangkaian asinkron; pembangun PHP boleh mula dengan pantas.
- Boleh Diperluaskan: Menyokong model multiproses untuk manfaat CPU berbilang-teras, scaling horizontal dan load balancing mudah. Paduan dengan pakej Composer dan pustaka PHP sedia ada adalah mudah.
- Integrasi Ekosistem PHP: Sebagai pustaka PHP, integrasinya dengan ekosistem PHP sedia ada sangat lancar, memudahkan pengurusan dependensi menggunakan Composer.
- Mod Daemon: Menyokong mode daemon untuk berjalan secara stabil di latar belakang, sesuai untuk deploy persekitaran produksi agar servis kekal tersedia.
Workerman membuka pintu untuk pembangun PHP membina aplikasi rangkaian berprestasi tinggi, masa nyata, dengan persamaan sambungan yang banyak.
Membina Persekitaran Pembangunan Workerman dengan ServBay
ServBay ialah alat persekitaran pembangunan tempatan yang dioptimumkan untuk pembangun web, menyediakan runtime PHP, Node.js, Python, Go, Java dan banyak lagi, serta Caddy, Nginx, Apache, MySQL, PostgreSQL, MongoDB, Redis, Memcached dan pelbagai perisian pelayan serta pangkalan data. Kelebihan utama ServBay ialah “siap guna”, termasuk Composer yang telah diinstal dan dikonfigurasikan. Ini menjadikan pembangunan dan pelaksanaan projek Workerman sangat mudah dalam ServBay.
Panduan ini akan menunjukkan cara membina dan menjalankan aplikasi Workerman di ServBay dengan beberapa contoh asas: pelayan HTTP, pelayan WebSocket dan pelayan TCP.
TIP
Untuk pengurusan yang mudah dan standardisasi, ServBay mengesyorkan semua fail projek laman web tempatan disimpan di direktori berikut:
- macOS:
/Applications/ServBay/www
- Windows:
C:\ServBay\www
Semua contoh laluan projek dalam dokumen ini akan berdasarkan direktori di atas.
Keperluan Pra-Pemasangan
Pastikan perkara berikut sebelum anda mula:
- ServBay Telah Dipasang & Berfungsi: Lawati Laman Rasmi ServBay untuk memuat turun dan memasang versi terbaru.
- PHP Telah Diaktifkan dalam ServBay: Pastikan versi PHP yang anda akan gunakan telah diaktifkan dalam panel kawalan ServBay. Workerman memerlukan PHP 5.4 ke atas — PHP 7.x atau 8.x sangat digalakkan untuk prestasi terbaik.
- Pengetahuan Asas PHP & Baris Perintah: Anda hendaklah faham sintaks PHP dan tahu menggunakan alat baris perintah dalam terminal.
Pemasangan Workerman
1. Pastikan Composer Boleh Digunakan
Composer telah disediakan dalam ServBay, jadi tidak perlu pemasangan berasingan. Pastikan ServBay telah dimulakan dan PHP yang anda pilih telah diaktifkan. ServBay akan mengkonfigurasi Composer untuk setiap versi PHP yang didayakan. Anda boleh mengakses Composer melalui terminal bawaan ServBay, atau terminal luar jika PHP & Composer telah ditambah ke PATH sistem.
Buka terminal dan periksa Composer dengan:
bash
composer -v
1
Jika Composer berfungsi dengan betul dalam ServBay, anda akan melihat info versi Composer dipaparkan. Jika arahan gagal, periksa sama ada ServBay berjalan dan versi PHP telah diaktifkan.
2. Cipta Direktori Projek
Navigasi ke root laman web ServBay yang disyorkan dan cipta direktori projek baru, kemudian masuk ke direktori itu:
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
Kita mencipta direktori bernama servbay-workerman-demo
untuk menempatkan fail projek Workerman.
3. Pasang Workerman dengan Composer
Dalam direktori projek, gunakan Composer untuk pasang pustaka Workerman (pilihan digalakkan — Composer urus dependensi secara automatik):
Lokasi projek:
- macOS:
/Applications/ServBay/www/servbay-workerman-demo
- Windows:
C:\ServBay\www\servbay-workerman-demo
bash
composer require workerman/workerman
1
Composer akan memuat turun Workerman dan semua dependensinya ke folder vendor
dalam projek anda.
Menulis Kod Pelayan HTTP Workerman
Pelayan HTTP adalah aplikasi Workerman yang paling umum, sesuai untuk membina aplikasi web atau servis API berprestasi tinggi.
Dalam direktori projek anda, cipta fail bernama http_server.php
(atau nama lain pilihan anda, contohnya server.php
) dan tambah kod PHP seperti ini:
php
<?php
// Import fail autoloader Composer untuk menggunakan kelas Workerman
require __DIR__ . '/vendor/autoload.php';
// Import kelas Worker daripada Workerman
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
use Workerman\Protocols\Http\Response;
// Cipta instance Worker, tentukan protokol dan addres yang didengar
// 'http://0.0.0.0:8080' bermaksud pelayan HTTP mendengar port 8080 pada semua interface
// 0.0.0.0 membenarkan akses dari mesin tempatan atau jaringan tempatan; 8080 ialah port
$http_worker = new Worker('http://0.0.0.0:8080');
// Tetapkan bilangan proses Worker yang akan dijalankan
// Di sini, 4 bermakna 4 proses PHP bebas mengendalikan permintaan. Laraskan mengikut jumlah teras CPU
$http_worker->count = 4;
// Takrifkan logik pemprosesan apabila menerima permintaan dari klien (HTTP)
// $connection ialah objek sambungan untuk balas ke klien
// $request ialah objek permintaan, mengandungi info URL, Headers, Body dsb.
$http_worker->onMessage = function(TcpConnection $connection, Request $request) {
// Hantar respons ringkas ke klien (HTTP)
// Protokol HTTP Workerman urus header respons secara automatik
$connection->send(new Response(200, [], 'Hello ServBay Workerman HTTP Server!'));
};
// Jalankan semua instance Worker
// Ini ialah event loop utama Workerman — proses Worker akan mula mendengar port dan mengendalikan 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 kod:
require __DIR__ . '/vendor/autoload.php';
: Memuat autoloader Composer supaya kelas Workerman (sepertiWorker
,Request
,Response
) boleh digunakan.use Workerman\...;
: Import kelas yang diperlukan.new Worker('http://0.0.0.0:8080')
: Buat instance Workerman — tentukan protokol (http
) dan alamat (0.0.0.0:8080
) yang didengar.$http_worker->count = 4;
: Bilangan proses Worker — lebih banyak proses membolehkan penggunaan sepenuhnya CPU berbilang-teras dan peningkatan persamaan sambungan.$http_worker->onMessage = function(TcpConnection $connection, Request $request) { ... };
: Fungsi callback dipanggil apabila permintaan HTTP lengkap diterima oleh Workerman.$connection
digunakan untuk membalas,$request
mengandungi info permintaan daripada klien, danResponse
membina respons HTTP standard.Worker::runAll();
: Memulakan event loop Workerman — semua Worker mula dengar dan proses sambungan masuk.
Menjalankan Pelayan HTTP Workerman
Dalam direktori projek, buka terminal dan jalankan perintah di bawah untuk memulakan pelayan HTTP:
Lokasi projek:
- macOS:
/Applications/ServBay/www/servbay-workerman-demo
- Windows:
C:\ServBay\www\servbay-workerman-demo
bash
php http_server.php start
1
Penjelasan mod operasi:
- Mod Foreground: Selepas
php http_server.php start
, Workerman berjalan di foreground; terminal akan papar log. GunaCtrl+C
untuk hentikan pelayan jika perlu — ini sesuai untuk pembangunan & debugging. - Mod Daemon (Latar Belakang): Untuk pengeluaran, jalankan:bashServer berjalan sebagai daemon di background dengan output diarahkan ke fail log.
php http_server.php start -d
1
Pengurusan Proses:
Workerman menyediakan arahan mudah untuk urus proses pelayan:
- Mula:
php http_server.php start
(foreground) /php http_server.php start -d
(background) - Henti:
php http_server.php stop
(menghentikan proses setelah permintaan semasa selesai) - Mula Semula:
php http_server.php restart
(stop kemudian start) - Reload (Lancar):
php http_server.php reload
(digunakan untuk kemas kini kod — restart proses secara bergilir tanpa gangguan pada servis) - Status:
php http_server.php status
(lihat status proses, penggunaan memori, bilangan sambungan, dll)
Selepas server dimulakan, buka pelayar web dan lawat http://localhost:8080
atau http://127.0.0.1:8080
. Anda akan nampak output Hello ServBay Workerman HTTP Server!
.
Membina Pelayan WebSocket Workerman
WebSocket membolehkan komunikasi dwihala tetap antara klien dan server, sesuai untuk aplikasi masa nyata seperti chat, data pasaran, permainan, dsb. Workerman menyediakan sokongan hebat untuk WebSocket.
Cipta Kod Pelayan WebSocket
Dalam direktori projek, cipta fail
websocket_server.php
dan tambah kod ini:php<?php require __DIR__ . '/vendor/autoload.php'; use Workerman\Worker; use Workerman\Connection\TcpConnection; // Cipta instance pelayan WebSocket, dengar pada port 8081
1
2
3
4
5
6
7
// 'websocket://0.0.0.0:8081' menentukan pelayan WebSocket // Workerman kendalikan proses handshake WebSocket secara automatik $ws_worker = new Worker('websocket://0.0.0.0:8081');
// Jalankan 4 proses untuk mengendalikan sambungan
$ws_worker->count = 4;
// Fungsi callback apabila sambungan baru terbentuk
// Dipanggil bila ada klien baru $ws_worker->onConnect = function(TcpConnection $connection) { echo "Sambungan WebSocket baru dari " . $connection->getRemoteIp() . "\n"; };
// Fungsi pemprosesan apabila mesej diterima dari klien
// $data ialah mesej yang diterima $ws_worker->onMessage = function(TcpConnection $connection, $data) { echo "Mesej diterima: " . $data . "\n"; // Balas semula mesej kepada klien // $connection->send() hantar dalam format WebSocket frame $connection->send('ServBay Workerman menerima: ' . $data); };
// Fungsi callback apabila sambungan ditutup
$ws_worker->onClose = function(TcpConnection $connection) {
echo "Sambungan WebSocket ditutup\n";
};
// Fungsi callback bila berlaku ralat (pilihan)
$ws_worker->onError = function(TcpConnection $connection, $code, $msg) {
echo "Ralat: $code - $msg\n";
};
// Jalankan semua instance Worker
Worker::runAll();
```
Menjalankan Pelayan WebSocket
Dalam direktori projek, jalankan arahan:
bashphp websocket_server.php start
1Anda juga boleh tambah
-d
untuk jalankan di latar belakang. Selepas dijalankan, sambung kews://localhost:8081
menggunakan klien WebSocket.
Contoh ujian dengan JavaScript di browser Console:
```javascript
var ws = new WebSocket("ws://localhost:8081");
ws.onopen = function(event) {
console.log("Sambungan WebSocket terbuka");
ws.send("Hello dari Browser!"); // hantar mesej
};
ws.onmessage = function(event) {
console.log("Mesej dari server:", event.data); // terima mesej
};
ws.onclose = function(event) {
if (event.wasClean) {
console.log("Sambungan ditutup dengan baik, kod=" + event.code + " sebab=" + event.reason);
} else {
console.error("Sambungan WebSocket mati");
}
};
ws.onerror = function(error) {
console.error("Ralat WebSocket:", error);
};
// Tutup sambungan (pilihan)
// ws.close();
```
Selepas berjaya bersambung, terminal akan papar info sambungan dan mesej yang dihantar akan dipaparkan serta dibalas ke browser oleh server.
Membina Pelayan TCP Workerman
Workerman juga membolehkan bina pelayan TCP umum untuk pelbagai aplikasi seperti server permainan, platform IoT, komunikasi tersuai, dsb.
Cipta Kod Pelayan TCP
Dalam direktori projek, cipta file
tcp_server.php
dan tambah kod berikut:php<?php require __DIR__ . '/vendor/autoload.php'; use Workerman\Worker; use Workerman\Connection\TcpConnection; // Cipta instance pelayan TCP, dengar pada port 8082
1
2
3
4
5
6
7
// 'tcp://0.0.0.0:8082' membuat pelayan TCP // Secara lalai, Workerman gunakan protokol Text (akhir baris '\n'), boleh ditukar ke protokol lain $tcp_worker = new Worker('tcp://0.0.0.0:8082');
// Jalankan 4 proses untuk kendalikan sambungan
$tcp_worker->count = 4;
// Callback bila sambungan baru dibuka
$tcp_worker->onConnect = function(TcpConnection $connection) {
echo "Sambungan TCP baru dari " . $connection->getRemoteIp() . "\n";
// Hantar mesej selamat datang bila klien berjaya sambung
$connection->send("Selamat datang ke ServBay Workerman TCP Server!\n");
};
// Callback apabila data diterima dari klien
// $data ialah data TCP mentah diterima dari klien $tcp_worker->onMessage = function(TcpConnection $connection, $data) { echo "Data diterima: " . $data; // Echo data semula ke klien $connection->send('ServBay Workerman menerima: ' . $data); };
// Callback apabila sambungan ditutup
$tcp_worker->onClose = function(TcpConnection $connection) {
echo "Sambungan TCP ditutup\n";
};
// Jalankan semua instance Worker
Worker::runAll();
```
Menjalankan Pelayan TCP
Dalam direktori projek, jalankan:
bashphp tcp_server.php start
1Anda juga boleh jalankan sebagai daemon dengan
-d
. Setelah server aktif, gunakan klien TCP untuk sambung kelocalhost:8082
.
Contoh sambungan dengan terminal lain menggunakan telnet
atau nc
:
```bash
# Dengan telnet
telnet localhost 8082
# Atau dengan nc (netcat)
nc localhost 8082
```
Selepas bersambung, anda akan dapat mesej selamat datang. Taipkan sebarang teks dan tekan Enter (kerana secara lalai gunakan protokol Text), server akan membalas semula mesej anda.
Perkara Penting & Tips
- Peruntukan Port: Pastikan port yang digunakan Workerman (8080, 8081, 8082 dalam contoh) tidak digunakan oleh program lain dalam macOS/Windows atau dalam ServBay. Jika port sudah digunakan, Workerman tidak akan dapat dilancarkan. Gunakan arahan
lsof -i :port
untuk semak status port. - Firewall: Firewall sistem anda mungkin menghalang akses ke port dari peranti lain. Dalam pembangunan tempatan, ini biasanya tidak menjadi masalah, tetapi jika hendak akses dari peranti rangkaian, konfigurasikan firewall agar membenarkan.
- Hubungan dengan ServBay Web Server: Workerman berjalan pada portnya sendiri dan merupakan proses yang independen dari Caddy/Nginx dalam ServBay. Workerman sesuai untuk sambungan jangka panjang atau persamaan tinggi (spt WebSocket), manakala Caddy/Nginx lebih untuk HTTP pendek tradisional.
- Versi PHP: Pastikan versi PHP yang digunakan dalam ServBay memenuhi keperluan minimum Workerman. ServBay menawarkan pelbagai versi PHP — pilih dan aktifkan yang sesuai melalui panel kawalan.
- Dependensi Ekstensi: Workerman mendapat prestasi optimum dengan sesetengah ekstensi seperti
event
(jika tersedia, akan diutamakan),posix
,pcntl
(untuk multiproses). ServBay biasanya mengaktifkan kebanyakan ekstensi utama, tetapi jika ada masalah, periksa status ekstensi dalam panel kawalan ServBay. - Log: Dalam mod daemon, output Workerman akan diarahkan ke fail log. Sentiasa semak log untuk memantau status dan ralat aplikasi.
Soalan Lazim (FAQ)
- Q: Bagaimana hentikan pelayan Workerman?
- A: Jika server berjalan di foreground (guna
start
), tekanCtrl+C
di terminal untuk hentikan. Untuk daemon (gunastart -d
), gunakan arahanphp nama_fail_server_anda.php stop
di direktori projek.
- A: Jika server berjalan di foreground (guna
- Q: Kenapa pelayan Workerman gagal bermula?
- A: Biasanya kerana port sudah digunakan. Semak mesej ralat di terminal — jika port menjadi punca, Cuba tukar ke port lain atau hentikan program yang tengah guna port itu. Guna
lsof -i :port
untuk semak.
- A: Biasanya kerana port sudah digunakan. Semak mesej ralat di terminal — jika port menjadi punca, Cuba tukar ke port lain atau hentikan program yang tengah guna port itu. Guna
- Q: Apa beza Caddy/Nginx ServBay dengan Workerman? Mana patut saya guna?
- A: Caddy/Nginx ialah pelayan web tradisional untuk HTTP/HTTPS, biasanya digunakan dengan PHP-FPM (PHP proses exit selepas selesai setiap permintaan). Workerman pula rangka kerja PHP asinkron — pelayan HTTP, WebSocket, TCP dan lain-lain boleh dibina sendiri, beroperasi secara resident dalam ingatan, dan sangat sesuai untuk persamaan, sambungan masa nyata, komunikasi yang tidak memerlukan proses musnah selepas tiap request. Pilihan bergantung kepada keperluan aplikasi: laman web tradisional atau RESTful API gunakan Caddy/Nginx; aplikasi masa nyata, chat, backend permainan, IoT dsb lebih baik dengan Workerman. Anda juga boleh gabungkan kedua — misalnya, guna Caddy/Nginx sebagai reverse proxy ke Workerman.
- Q: Boleh jalankan lebih dari satu aplikasi Workerman serentak dalam ServBay?
- A: Ya. Setiap aplikasi Workerman perlukan proses PHP yang berasingan serta port yang berlainan. Cipta skrip permulaan berbeza untuk setiap aplikasi dan jalankan secara serentak (atau di background) — pastikan port tidak bertindih.
Ringkasan
Melalui panduan ini, anda telah mempelajari cara membina persekitaran pembangunan tempatan yang efisien dengan ServBay dan Workerman, serta memulakan projek Workerman dengan cepat. Dengan kelajuan dan ciri asinkron Workerman, pembangun PHP mendapat alat ampuh untuk mencipta generasi aplikasi rangkaian masa depan. Dengan Composer & PHP “siap guna” dalam ServBay, anda boleh tingkatkan produktiviti dan fokus kepada logik aplikasi, bukan konfigurasi persekitaran. Sama ada untuk membina pelayan web berprestasi tinggi atau aplikasi WebSocket masa nyata, ServBay ialah rakan pembangunan tempatan terbaik anda untuk projek Workerman. Selamat maju jaya menjelajah dunia Workerman!