Menyediakan dan Menjalankan Aplikasi Workerman di ServBay
Pengenalan
Dokumen ini bertujuan membimbing pengguna ServBay bagaimana untuk membina serta menjalankan aplikasi rangkaian asinkron yang berprestasi tinggi berasaskan Workerman dengan pantas pada persekitaran pembangunan tempatan macOS, memanfaatkan sokongan PHP dan Composer terbina dalam ServBay. Workerman ialah pustaka PHP yang berkuasa, sesuai untuk membina pelbagai servis rangkaian berkebolehan tinggi seperti pelayan Web, pelayan komunikasi masa nyata, pelayan permainan dan banyak lagi. ServBay menyediakan platform pembangunan "plug-and-play" yang memudahkan proses konfigurasi Workerman secara drastik.
Apa itu Workerman?
Workerman ialah rangka kerja komunikasi rangkaian asinkron berprestasi tinggi sumber terbuka yang ditulis sepenuhnya dalam PHP. Ia menggunakan mekanisme EventLoop, melaksanakan I/O asinkron bukan-sekat, dan dapat mengendalikan sambungan konkuren yang besar secara berkesan. Berbeza dengan mod pembangunan Web PHP tradisional (seperti Apache/Nginx + PHP-FPM), aplikasi Workerman biasanya berjalan secara kekal dalam memori, mendengar pada port tertentu, dan terus mengendalikan sambungan dan data rangkaian — mengelakkan beban yang berlaku apabila PHP dimulakan dan dimusnahkan untuk setiap permintaan dalam model tradisional, yang secara signifikan meningkatkan prestasi dan throughput.
Dengan Workerman, pembangun boleh dengan mudah membangunkan:
- Pelayan HTTP berprestasi tinggi, malah boleh menggantikan Apache/Nginx untuk permintaan statik atau dinamik yang mudah.
- Pelayan WebSocket masa nyata untuk membina aplikasi seperti chatroom, push data masa nyata dan lain-lain.
- Pelayan TCP/UDP mengikut protokol tersuai.
- Alat baris arahan, tugas terjadual, mikro-servis dan sebagainya.
Ciri dan Keunggulan Utama Workerman
- Berprestasi Tinggi: Berasaskan pemacu peristiwa dan I/O asinkron bukan-sekat, mampu mengendalikan beban sambungan konkuren yang sangat besar dengan prestasi unggul.
- Sokongan Pelbagai Protokol: Terbina dalam sokongan untuk protokol HTTP, WebSocket, TCP, UDP dan banyak lagi. Pembangun juga boleh mengimplementasi protokol tersuai melalui antaramuka fleksibel.
- Mudah Digunakan: Menyediakan API yang ringkas dan intuitif, mengurangkan kerumitan pengaturcaraan rangkaian asinkron supaya pembangun PHP boleh cepat menguasainya.
- Fleksibel dan Boleh Diperluas: Menyokong model berbilang proses, memudahkan penggunaan CPU berbilang teras untuk skala mendatar dan pengimbangan beban. Mudah untuk integrasi pakej Composer dan pustaka PHP sedia ada.
- Integrasi Ekosistem PHP: Sebagai pustaka PHP, ia bersepadu erat dengan ekosistem PHP sedia ada dan boleh mengurus kebergantungan dengan mudah melalui Composer.
- Mod Daemon: Sokongan untuk berjalan sebagai servis daemon di latar belakang, sesuai untuk deployment produksi dan memastikan ketersediaan perkhidmatan secara lestari.
Workerman membuka pintu luas kepada pembangun PHP untuk mencipta aplikasi rangkaian masa nyata dan berkebolehan konkuren tinggi.
Menyediakan Persekitaran Pembangunan Workerman menggunakan ServBay
ServBay ialah alat persekitaran pembangunan tempatan khusus untuk pembangun Web, mengintegrasi pelbagai runtime bahasa popular seperti PHP, Node.js, Python, Go, Java serta perisian pelayan/databasa seperti Caddy, Nginx, Apache, MySQL, PostgreSQL, MongoDB, Redis, Memcached dan banyak lagi. Keunggulan utama ServBay adalah sifatnya yang "plug-and-play", terutama dengan Composer yang telah dipasang dan dikonfigurasikan untuk kemudahan pemasangan projek Workerman secara terus.
Panduan ini akan mendemonstrasi penyediaan dan menjalankan aplikasi Workerman dengan cepat di persekitaran ServBay, termasuk contoh pelayan HTTP, WebSocket dan TCP yang mudah.
TIP
Untuk pengurusan yang teratur, ServBay menyarankan agar semua fail projek web tempatan disimpan di direktori /Applications/ServBay/www
. Semua contoh laluan projek dalam dokumen ini adalah berdasarkan kepada direktori ini.
Prasyarat
Pastikan anda memenuhi syarat berikut sebelum memulakan:
- ServBay telah dipasang dan berjalan dengan baik: Layari laman rasmi ServBay untuk memuat turun dan memasang versi terkini.
- PHP telah diaktifkan dalam ServBay: Pada panel kawalan ServBay, pastikan versi PHP yang anda ingin gunakan telah diaktifkan. Workerman memerlukan sekurang-kurangnya PHP 5.4 (disarankan PHP 7.x atau 8.x untuk prestasi terbaik).
- Pengetahuan asas PHP dan baris arahan: Anda perlu memahami sintaks PHP dan cara menggunakan baris arahan dalam terminal.
Memasang Workerman
1. Pastikan Composer Tersedia
ServBay disertakan dengan Composer, jadi tiada pemasangan berasingan diperlukan. Pastikan persekitaran ServBay anda telah dimulakan dan versi PHP yang dikehendaki diaktifkan. ServBay secara automatik menyediakan Composer untuk setiap versi PHP. Anda boleh guna terminal bawaan ServBay atau terminal sistem (jika PATH telah dikonfigurasi) untuk mengakses Composer.
Buka terminal dan masukkan arahan berikut untuk mengesahkan Composer tersedia:
bash
composer -v
1
Jika Composer terpasang dan dikonfigurasi dengan betul di persekitaran PHP ServBay, anda akan melihat maklumat versi Composer. Jika arahan tidak dijumpai, periksa ServBay sedang berjalan dan PHP telah diaktifkan.
2. Buat Direktori Projek
Navigasi ke direktori root web yang disyorkan ServBay dan cipta direktori projek baharu lalu masuk ke dalamnya:
bash
cd /Applications/ServBay/www
mkdir servbay-workerman-demo
cd servbay-workerman-demo
1
2
3
2
3
Di sini kita mencipta satu direktori bernama servbay-workerman-demo
sebagai lokasi fail projek Workerman.
3. Pasang Workerman menggunakan Composer
Dalam direktori projek (/Applications/ServBay/www/servbay-workerman-demo
), pasang pustaka Workerman menggunakan Composer. Cara ini disarankan kerana Composer akan urus semua kebergantungan:
bash
composer require workerman/workerman
1
Composer akan memuat turun Workerman dan segala kebergantungannya ke direktori vendor
dalam projek semasa.
Menulis Kod Pelayan HTTP Workerman
Pelayan HTTP adalah salah satu penggunaan paling umum untuk Workerman, sesuai untuk membina aplikasi Web atau API berprestasi tinggi.
Di dalam direktori projek, cipta satu fail bernama http_server.php
(atau nama lain pilihan anda seperti server.php
) dan masukkan kod PHP berikut:
php
<?php
// Sertakan fail autoload Composer untuk membolehkan penggunaan kelas Workerman
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;
// Cipta objek Worker dan tetapkan protokol & alamat untuk didengar
// 'http://0.0.0.0:8080' bermaksud pelayan HTTP mendengar pada semua antaramuka rangkaian, port 8080
// 0.0.0.0 membolehkan akses daripada mesin ini atau peranti lain dalam LAN; 8080 ialah nombor port yang didengar
$http_worker = new Worker('http://0.0.0.0:8080');
// Tetapkan bilangan proses Worker
// Di sini 4 bermaksud 4 proses berasingan untuk mengendalikan permintaan, boleh laras mengikut bilangan teras CPU
$http_worker->count = 4;
// Tentukan logik pemprosesan apabila menerima permintaan klien (HTTP request)
// $connection ialah objek sambungan semasa, untuk menghantar respons ke klien
// $request ialah objek permintaan yang mengandungi maklumat penuh permintaan (URL, Header, Body dsb.)
$http_worker->onMessage = function(TcpConnection $connection, Request $request) {
// Hantar respons HTTP ringkas ke klien
// Protokol HTTP Workerman akan urus header dan perincian lain secara automatik
$connection->send(new Response(200, [], 'Hello ServBay Workerman HTTP Server!'));
};
// Jalankan semua instance Worker
// Ini adalah gelung utama Workerman — selepas dimulakan, Worker akan mula mendengar port dan mengendalikan acara
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';
: Memasukkan autoloader Composer supaya kelas Workerman sepertiWorker
,Request
,Response
boleh digunakan.use Workerman\...;
: Mengimport kelas yang diperlukan.new Worker('http://0.0.0.0:8080')
: Mencipta instance Worker untuk mendengar pada protokolhttp
serta alamat0.0.0.0:8080
.$http_worker->count = 4;
: Menetapkan bilangan proses PHP yang digunakan. Lebih banyak proses membolehkan penggunaan CPU pelbagai teras untuk penanganan permintaan konkuren lebih cekap.$http_worker->onMessage = function(...) { ... }
: Mendefinisikan fungsi callback untuk menangani setiap permintaan HTTP penuh.$connection
digunakan untuk menghantar respons,$request
mengandungi data permintaan, dan kelasResponse
digunakan untuk membina respons HTTP standard.Worker::runAll();
: Memulakan Workerman event loop serta semua proses Worker yang telah ditentukan.
Menjalankan Pelayan HTTP Workerman
Dalam direktori projek Anda (/Applications/ServBay/www/servbay-workerman-demo
), buka terminal dan jalankan arahan berikut untuk memulakan pelayan HTTP:
bash
php http_server.php start
1
Cara Mod Pelaksanaan:
- Mod Hadapan (Foreground): Menjalankan
php http_server.php start
akan menjalankan Workerman secara interaktif dan memaparkan log serta maklumat di terminal. GunakanCtrl+C
untuk menghentikan pelayan. Mod ini sesuai untuk pembangunan dan debugging. - Mod Daemon (Daemon): Untuk lingkungan produksi, jalankan sebagai daemon di latar belakang menggunakan parameter
-d
:bashWorkerman akan berjalan di latar belakang dan output akan dialihkan ke fail log (lokasi lalai dalam direktori Workerman atau laluan tertentu jika ditentukan).php http_server.php start -d
1
Pengurusan Proses:
Workerman membekalkan pelbagai arahan pengurusan proses yang mudah:
- Mulakan:
php http_server.php start
(mod hadapan) atauphp http_server.php start -d
(mod daemon) - Henti:
php http_server.php stop
(akan menunggu proses selesai dengan baik sebelum keluar) - Mula Semula:
php http_server.php restart
(henti dan mulakan semula) - Muat Semula (Reload):
php http_server.php reload
(biasanya selepas kemas kini kod, akan mulakan semula satu demi satu tanpa gangguan servis, tetapi pastikan penggunaan fungsi kitaran hayat sepertionWorkerStart
) - Lihat Status:
php http_server.php status
(lihat info status proses Workerman, penggunaan memori, bilangan sambungan dsb.)
Selepas pelayan dimulakan, buka pelayar anda dan lawati http://localhost:8080
atau http://127.0.0.1:8080
. Anda sepatutnya akan melihat paparan Hello ServBay Workerman HTTP Server!
.
Membina Pelayan WebSocket dengan Workerman
Protokol WebSocket membolehkan sambungan dua hala yang berterusan antara klien dan pelayan, sangat sesuai untuk aplikasi masa nyata seperti chat, data saham masa nyata, permainan dan sebagainya. Workerman menawarkan sokongan WebSocket yang cemerlang.
Tulis Kod Pelayan WebSocket
Cipta satu fail bernama
websocket_server.php
dalam direktori projek dan masukkan kod berikut:php<?php require __DIR__ . '/vendor/autoload.php'; use Workerman\Worker; use Workerman\Connection\TcpConnection; // Cipta instans pelayan WebSocket yang mendengar port 8081 // 'websocket://0.0.0.0:8081' bermaksud pelayan WebSocket // Workerman akan uruskan proses handshake WebSocket secara automatik $ws_worker = new Worker('websocket://0.0.0.0:8081'); // Mula 4 proses untuk mengendalikan sambungan $ws_worker->count = 4; // Logik apabila sambungan baru berjaya diadakan // Dicetus apabila klien baharu menyambung ke pelayan $ws_worker->onConnect = function(TcpConnection $connection) { echo "Sambungan WebSocket baharu dari " . $connection->getRemoteIp() . "\n"; }; // Logik apabila menerima mesej dari klien // Dicetus apabila pelayan menerima mesej WebSocket klien // $data ialah kandungan mesej yang telah didekod $ws_worker->onMessage = function(TcpConnection $connection, $data) { echo "Mesej diterima: " . $data . "\n"; // Echo balik mesej diterima ke klien // $connection->send() akan enkod mesej sebagai kerangka WebSocket secara automatik $connection->send('ServBay Workerman menerima: ' . $data); }; // Logik apabila sambungan ditutup // Dicetus apabila klien memutuskan sambungan $ws_worker->onClose = function(TcpConnection $connection) { echo "Sambungan WebSocket ditutup\n"; }; // Logik apabila berlaku ralat (pilihan) $ws_worker->onError = function(TcpConnection $connection, $code, $msg) { echo "Ralat: $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
41
42
43
44Jalankan Pelayan WebSocket
Dalam direktori projek, jalankan arahan berikut:
bashphp websocket_server.php start
1Anda juga boleh menggunakan
-d
untuk menjalankan di latar belakang. Selepas dimulakan, anda boleh gunakan alat klien WebSocket untuk menyambung kews://localhost:8081
.Contohnya, anda boleh cuba dengan Console pada alat pembangun pelayar menggunakan JavaScript:
javascriptvar ws = new WebSocket("ws://localhost:8081"); ws.onopen = function(event) { console.log("Sambungan WebSocket dibuka"); ws.send("Hai dari Pelayar!"); // Hantar mesej }; ws.onmessage = function(event) { console.log("Mesej dari pelayan:", event.data); // Terima mesej }; ws.onclose = function(event) { if (event.wasClean) { console.log("Sambungan WebSocket ditutup dengan kemas, kod=" + event.code + " sebab=" + event.reason); } else { console.error("Sambungan WebSocket terputus"); } }; ws.onerror = function(error) { console.error("Ralat WebSocket:", error); }; // Tutup sambungan (pilihan) // 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 bersambung dengan berjaya, anda akan melihat output log pada terminal, dan setiap mesej akan dipaparkan serta diterima semula oleh pelayar.
Membina Pelayan TCP menggunakan Workerman
Workerman juga boleh digunakan membina pelayan TCP untuk pelbagai aplikasi termasuk backend permainan, IoT, dan servis komunikasi tersuai.
Tulis Kod Pelayan TCP
Cipta fail
tcp_server.php
dan tambahkan kod berikut:php<?php require __DIR__ . '/vendor/autoload.php'; use Workerman\Worker; use Workerman\Connection\TcpConnection; // Cipta instans pelayan TCP mendengar port 8082 // 'tcp://0.0.0.0:8082' bermaksud pelayan TCP // Workerman secara lalai menggunakan protokol Text (pengakhir baris '\n'), boleh juga protokol lain $tcp_worker = new Worker('tcp://0.0.0.0:8082'); // Mula 4 proses untuk sambungan $tcp_worker->count = 4; // Logik apabila sambungan baharu $tcp_worker->onConnect = function(TcpConnection $connection) { echo "Sambungan TCP baharu dari " . $connection->getRemoteIp() . "\n"; // Hantar mesej selamat datang $connection->send("Selamat datang ke ServBay Workerman TCP Server!\n"); }; // Logik bila menerima mesej // $data ialah data TCP asli diterima dari klien (mengikut protokol) $tcp_worker->onMessage = function(TcpConnection $connection, $data) { echo "Data diterima: " . $data; // Echo semula data kepada klien $connection->send('ServBay Workerman menerima: ' . $data); }; // Logik apabila sambungan terputus $tcp_worker->onClose = function(TcpConnection $connection) { echo "Sambungan 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
36Jalankan Pelayan TCP
Dalam direktori projek, jalankan arahan berikut:
bashphp tcp_server.php start
1Anda juga boleh gunakan mod daemon. Setelah pelayan dimulakan, guna alat klien TCP (mis. telnet atau netcat) untuk sambung ke
localhost:8082
.Contohnya, di macOS/Linux, buka terminal lain dan jalankan:
bash# Guna telnet telnet localhost 8082 # Atau gunakan nc (netcat) nc localhost 8082
1
2
3
4
5Anda akan menerima mesej selamat datang dari pelayan. Ketik sebarang teks dan tekan Enter (protokol Text gunakan pengakhir baris), pelayan akan echo semula mesej anda.
Perkara Penting
- Port Diperlukan: Pastikan port yang didengar Workerman (mis. 8080, 8081, 8082) tidak digunakan oleh sistem macOS atau servis lain dalam ServBay. Jika berlaku pertindihan port, Workerman tidak akan dapat bermula dan akan melemparkan ralat. Guna
lsof -i :nombor_port
untuk semakan. - Firewall: Firewall terbina dalam macOS mungkin menyekat akses luar ke port ini. Untuk persekitaran tempatan biasanya tidak menjadi isu, namun jika perlu akses dari peranti lain, pastikan tetapan firewall dibuka.
- Hubungan dengan Pelayan Web ServBay: Workerman berjalan atas port tersendiri dan merupakan proses/servis bebas berbanding Caddy atau Nginx dalam ServBay. Workerman biasanya mengendalikan sambungan secara langsung, kecuali anda konfigurasi proksi songsang. Ia lebih sesuai untuk aplikasi berkebolehan tinggi dan async seperti WebSocket, sementara Caddy/Nginx pada ServBay biasanya untuk HTTP tradisional/permintaan ringkas.
- Versi PHP: Pastikan versi PHP yang digunakan memenuhi syarat minimum Workerman. ServBay menyokong pelbagai versi PHP siap dipasang. Pilih dan aktifkan mengikut keperluan pada panel ServBay.
- Kebergantungan Sambungan PHP: Untuk prestasi dan fungsi optimum, Workerman memanfaatkan beberapa sambungan PHP seperti
event
(harus diaktif jika ada untuk prestasi lebih tinggi),posix
,pcntl
(untuk model berbilang proses). Kebanyakan telah siap diaktifkan dalam ServBay, namun sekiranya ada isu, semak pengaktifan sambungan di panel ServBay. - Log: Dalam mod daemon, output Workerman akan dialihkan ke fail log. Semak log secara berkala untuk memantau status aplikasi dan sebarang ralat.
Soalan Lazim (FAQ)
- S: Bagaimana untuk berhenti pelayan Workerman?
- J: Jika berjalan di mod hadapan (guna arahan
start
), tekanCtrl+C
pada terminal. Jika berjalan di latar belakang, gunakanphp nama_fail_server_anda.php stop
.
- J: Jika berjalan di mod hadapan (guna arahan
- S: Mengapa pelayan Workerman tidak dapat dimulakan?
- J: Sebab utama biasanya port telah digunakan. Semak log ralat. Tukar ke port lain yang tidak digunakan atau hentikan servis yang guna port tersebut. Gunakan
lsof -i :nombor_port
untuk periksa.
- J: Sebab utama biasanya port telah digunakan. Semak log ralat. Tukar ke port lain yang tidak digunakan atau hentikan servis yang guna port tersebut. Gunakan
- S: Apakah beza antara Caddy/Nginx dalam ServBay dan Workerman? Mana patut saya guna?
- J: Caddy/Nginx ialah pelayan Web tradisional untuk HTTP/HTTPS biasanya digunakan dengan PHP-FPM, di mana proses PHP dimulakan/mati untuk setiap permintaan. Workerman ialah rangka kerja rangkaian PHP async dengan pelayan HTTP terbina, juga sokongan WebSocket/TCP/UDP yang berjalan dalam memori. Gunakan Caddy/Nginx untuk laman web tradisional/API, Workerman untuk aplikasi masa nyata, chat, backend game, IoT dsb. Kedua-duanya boleh digabungkan melalui proksi songsang.
- S: Bolehkah saya jalankan beberapa aplikasi Workerman secara serentak di ServBay?
- J: Ya, setiap aplikasi Workerman perlu berjalan dalam proses PHP sendiri, mendengar pada port unik. Sediakan skrip jalankan tersendiri untuk setiap aplikasi dan pastikan tiada pertindihan port.
Rumusan
Dengan panduan ini, anda telah mempelajari cara membina dan menjalankan projek Workerman dengan efisien di persekitaran tempatan ServBay. Workerman menawarkan kekuatan membangunkan aplikasi rangkaian PHP berprestasi tinggi, async dan berkebolehan konkuren, manakala kombinasi dengan Composer serta PHP yang telah sedia tersedia dalam ServBay membolehkan anda memberi tumpuan sepenuhnya pada pembangunan logik aplikasi, tanpa membuang masa dalam konfigurasi persekitaran. Sama ada anda membangunkan pelayan Web berprestasi tinggi atau aplikasi WebSocket masa nyata, ServBay ialah rakan pembangunan Workerman yang ideal di macOS tempatan anda. Semoga artikel ini membantu anda memulakan penerokaan Workerman dengan lancar!