Menggunakan Swoole Dalam ServBay Untuk Membina Aplikasi PHP Berprestasi Tinggi
ServBay ialah persekitaran pembangunan web tempatan yang direka khas untuk pembangun, merangkumi pelbagai persekitaran bahasa, pangkalan data dan alat yang telah disatukan, dengan tujuan memudahkan aliran kerja pembangunan tempatan. Artikel ini memberi tumpuan kepada cara memanfaatkan sambungan Swoole dalam ServBay, membolehkan anda membina perkhidmatan rangkaian PHP berprestasi tinggi.
Apa Itu Swoole?
Swoole ialah enjin komunikasi rangkaian paralel dan berprestasi tinggi untuk PHP, berasaskan coroutine (korutin). Ia ditulis sepenuhnya dalam bahasa C untuk membekalkan kemampuan komunikasi rangkaian asinkron, paralel dan coroutine kepada PHP. Dengan Swoole, pembangun PHP dapat melangkaui model permintaan-respons tradisional pelayan web seperti Apache/Nginx + PHP-FPM, dan mengendalikan tugasan trafik tinggi dengan lebih cekap—contohnya, membina pelayan web kekal dalam memori, pelaksanaan tugasan asinkron, atau perkhidmatan komunikasi masa nyata seperti WebSocket.
Ciri-ciri utama Swoole:
- Prestasi Tinggi: Dibina berasaskan C, menyokong I/O asinkron, berbilang proses/benang.
- Coroutine: Menyediakan coroutine ringan untuk pelaksanaan kod asinkron, memudahkan model pengaturcaraan asinkron.
- Sokongan Protokol Meluas: Menyokong pelbagai protokol rangkaian secara asal seperti TCP/UDP/HTTP/WebSocket.
- Mudah Digunakan: Menawarkan API ringkas yang konsisten dengan gaya pengaturcaraan PHP.
- Proses Kekal: Aplikasi boleh dijalankan sebagai proses kekal, mengurangkan beban permulaan setiap permintaan seperti aplikasi PHP tradisional.
Dengan Swoole, PHP bukan hanya untuk skrip web—ia kini mampu menangani pelbagai senario aplikasi rangkaian berprestasi tinggi.
Cara Mengaktifkan Swoole Dalam ServBay
Salah satu matlamat ServBay adalah memudahkan pengurusan dan penggunaan sambungan PHP untuk pembangun. Swoole, sebagai komponen penting untuk pembangunan PHP moden berprestasi tinggi, telah diprapasang dalam ServBay. Mengaktifkannya hanya memerlukan beberapa langkah mudah.
Pra-syarat:
- ServBay sudah dipasang dan dijalankan.
- Sekurang-kurangnya satu versi PHP telah dipasang dalam ServBay.
Langkah Pengaktifan:
- Buka antara muka aplikasi ServBay.
- Navigasi ke bahagian “Pakej (Packages)” atau pengurusan versi PHP. (Nota: Bergantung pada versi ServBay, nama bahagian mungkin sedikit berbeza, biasanya berada di laman utama atau tetapan)
- Pilih versi PHP yang anda mahu aktifkan Swoole.
- Cari pilihan sambungan Swoole dan aktifkan. ServBay biasanya memaparkan sambungan yang telah dikompilkan dalam bentuk senarai atau suis.
- Simpan tetapan dan ikut arahan untuk mulakan semula ServBay atau servis PHP berkaitan. ServBay akan secara automatik mengkonfigurasi persekitaran PHP untuk memuatkan sambungan Swoole.
Selepas langkah-langkah di atas, anda boleh mula menggunakan Swoole pada versi PHP yang dipilih. Untuk pengesahan, jalankan arahan php -m
dari terminal dan pastikan swoole
muncul dalam senarai sambungan aktif.
TIP
ServBay secara lalai mencadangkan anda menyimpan laman web dan fail projek dalam direktori berikut, bagi memudahkan pengurusan dan konfigurasi laman web oleh ServBay:
- macOS:
/Applications/ServBay/www
- Windows:
C:\ServBay\www
Contoh dalam artikel ini juga akan menggunakan laluan cadangan tersebut.
Membina Pelayan HTTP Swoole Mudah
Seterusnya, kita akan membina pelayan HTTP Swoole asas untuk menunjukkan pemprosesan permintaan web.
Langkah 1: Cipta Direktori Projek
Buka terminal, cipta dan masuk ke direktori projek baru, menggunakan laluan cadangan ServBay mengikut sistem operasi:
macOS:
bash
cd /Applications/ServBay/www
mkdir servbay-swoole-http
cd servbay-swoole-http
1
2
3
2
3
Windows:
cmd
cd C:\ServBay\www
mkdir servbay-swoole-http
cd servbay-swoole-http
1
2
3
2
3
Langkah 2: Tulis Skrip Pelayan
Dalam direktori servbay-swoole-http
, cipta fail bernama server.php
dan tambah kandungan berikut:
php
<?php
use Swoole\Http\Server;
use Swoole\Http\Request;
use Swoole\Http\Response;
// Cipta instans pelayan HTTP Swoole
// Dengar di semua rangkaian (0.0.0.0) pada port 9501
$server = new Server("0.0.0.0", 9501);
// Daftar fungsi callback untuk acara 'start'
// Dicetuskan apabila pelayan berjaya dimulakan
$server->on("start", function (Server $server) {
echo "Pelayan HTTP Swoole telah dimulakan di http://0.0.0.0:9501\n";
// Anda boleh log ID proses utama, ID proses pengurusan, dsb di sini
});
// Daftar fungsi callback untuk acara 'request'
// Dicetuskan apabila menerima permintaan HTTP baharu
$server->on("request", function (Request $request, Response $response) {
// Tetapkan header respons
$response->header("Content-Type", "text/plain");
// Logik berdasarkan laluan atau parameter permintaan
$path = $request->server['request_uri'] ?? '/';
$content = "Hello ServBay!";
if ($path === '/info') {
$content = "Laluan permintaan: " . $path . "\n";
$content .= "Kaedah: " . $request->server['request_method'] . "\n";
$content .= "IP klien: " . $request->server['remote_addr'] . "\n";
// Maklumat permintaan lain boleh didapati dari objek $request
}
// Hantar badan respons dan tamatkan permintaan
$response->end($content);
});
// Mulakan pelayan
$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 mewujudkan pelayan HTTP Swoole yang mendengar pada port 9501. Apabila menerima permintaan, ia membalas dengan teks ringkas "Hello ServBay!". Jika anda lawati laluan /info
, ia akan memaparkan maklumat permintaan.
Langkah 3: Jalankan Pelayan Swoole
Pastikan terminal anda berada dalam direktori servbay-swoole-http
. Jalankan skrip menggunakan versi PHP yang telah diaktifkan Swoole dalam ServBay:
bash
php server.php
1
Jika berjaya, anda akan lihat keluaran berikut di terminal:
bash
Pelayan HTTP Swoole telah dimulakan di http://0.0.0.0:9501
1
Ini bermakna pelayan HTTP Swoole telah berjalan di latar belakang dan mendengar pada port 9501.
Langkah 4: Akses Pelayan Swoole
Buka pelayar web anda dan lawati:
http://localhost:9501
http://localhost:9501/info
Laman web ini akan memaparkan Hello ServBay!
dan maklumat permintaan, masing-masing.
Untuk hentikan pelayan, kembali ke terminal yang menjalankan skrip dan tekan Ctrl + C
.
Mengendalikan Sambungan WebSocket Dengan Swoole
Swoole menyokong protokol WebSocket secara natif, sangat sesuai untuk membina aplikasi komunikasi masa nyata seperti chatroom, pelayan permainan, atau penolakan data masa nyata.
Langkah 1: Tulis Skrip Pelayan WebSocket
Dalam direktori projek anda (servbay-swoole-http
atau cipta direktori baharu seperti servbay-swoole-websocket
), cipta fail bernama websocket_server.php
dan tambah kandungan berikut:
Direktori projek:
- macOS:
/Applications/ServBay/www/servbay-swoole-http
- Windows:
C:\ServBay\www\servbay-swoole-http
php
<?php
use Swoole\WebSocket\Server;
use Swoole\Http\Request;
use Swoole\WebSocket\Frame;
// Cipta instans pelayan WebSocket Swoole
// Pelayan WebSocket mewarisi pelayan HTTP, jadi boleh juga proses permintaan HTTP
$server = new Server("0.0.0.0", 9502); // Dengar pada port 9502
// Daftar acara 'start', dicetus bila pelayan bermula
$server->on("start", function (Server $server) {
echo "Pelayan WebSocket Swoole telah dimulakan di ws://0.0.0.0:9502\n";
});
// Daftar acara 'open'
// Dicetus bila sambungan WebSocket baru diwujudkan
// Objek $request mengandungi maklumat klien, contohnya $request->fd ialah pemegang fail klien
$server->on("open", function (Server $server, Request $request) {
echo "sambungan dibuka: {$request->fd}\n";
// Boleh hantar mesej alu-aluan kepada klien
$server->push($request->fd, "Selamat datang ke Demo ServBay WebSocket!");
});
// Daftar acara 'message'
// Dicetus bila pelayan menerima mesej dari klien WebSocket
// Objek $frame mengandungi maklumat mesej seperti $frame->data (kandungan mesej), $frame->fd (klien yang hantar)
$server->on("message", function (Server $server, Frame $frame) {
echo "terima mesej dari {$frame->fd}: {$frame->data}\n";
// Kembalikan mesej kepada klien pengirim atau broadcast kepada semua klien
// Contoh: Kembalikan kepada pengirim
$server->push($frame->fd, "Hello, anda telah hantar: {$frame->data}");
// Contoh broadcast (perlukan senarai sambungan/iterasi)
// foreach ($server->connections as $fd) {
// if ($fd != $frame->fd) { // Jangan hantar kepada pengirim
// $server->push($fd, "Pengguna {$frame->fd} berkata: {$frame->data}");
// }
// }
});
// Daftar acara 'close'
// Dicetuskan apabila sambungan klien ditutup
$server->on("close", function ($ser, $fd) {
echo "sambungan ditutup: {$fd}\n";
});
// Mulakan pelayan
$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 mewujudkan pelayan WebSocket Swoole pada port 9502, dan mentakrifkan callback untuk beberapa acara utama: start
(permulaan pelayan), open
(sambungan baru), message
(menerima mesej), dan close
(penutupan sambungan). Dalam acara message
, pelayan akan menghantar semula mesej yang diterima kepada penghantar dengan tambahan teks untuk maklumbalas.
Langkah 2: Jalankan Pelayan WebSocket
Pastikan terminal anda berada di direktori yang mengandungi websocket_server.php
. Jalankan skrip tersebut dengan versi PHP yang telah diaktifkan Swoole dalam ServBay:
bash
php websocket_server.php
1
Jika berjaya, anda akan lihat keluaran berikut di terminal:
bash
Pelayan WebSocket Swoole telah dimulakan di ws://0.0.0.0:9502
1
Ini bermakna pelayan WebSocket Swoole berjalan dan mendengar pada port 9502.
Langkah 3: Sambung Ke Pelayan WebSocket
Terdapat pelbagai cara untuk menyambung dan menguji pelayan WebSocket ini.
Cara A: Menggunakan Alat Pembangun Pelayar
Kebanyakan pelayar moden mempunyai alat pembangun (tekan F12) dengan panel “Rangkaian (Network)” atau “Konsol (Console)” untuk menguji sambungan WebSocket.
Buka mana-mana laman web (contoh:
about:blank
).Buka alat pembangun dan tukar ke panel “Konsol (Console)”.
Masukkan kod JavaScript ini untuk wujudkan sambungan:
javascriptvar ws = new WebSocket("ws://localhost:9502"); ws.onopen = function(event) { console.log("Sambungan WebSocket dibuka:", event); ws.send("Hello dari Browser!"); // Hantar mesej sebaik sambungan berjaya }; ws.onmessage = function(event) { console.log("Mesej dari pelayan:", event.data); // Terima mesej }; ws.onerror = function(event) { console.error("Ralat WebSocket:", event); // Jika berlaku ralat }; ws.onclose = function(event) { console.log("Sambungan WebSocket ditutup:", event); // Bila sambungan tutup }; // Anda boleh hantar mesej dengan ws.send("mesej") // Tutup sambungan dengan ws.close()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21Jalankan kod tersebut di konsol dan lihat hasilnya. Pada terminal pelayan WebSocket, anda juga boleh melihat log sambungan dan mesej.
Cara B: Menggunakan Alat Baris Perintah wscat
wscat
ialah alat klien WebSocket baris perintah berasaskan Node.js.
Pasang
wscat
: Jika Node.js dan npm belum terpasang, pasang dahulu. Kemudian installwscat
secara global:bashnpm install -g wscat
1Sambung ke pelayan WebSocket: Jalankan arahan ini di terminal:
bashwscat -c ws://localhost:9502
1Jika berjaya, anda akan lihat prompt
>
.Hantar mesej: Taipkan mesej anda di prompt dan tekan Enter:
bash> Hello ServBay melalui wscat
1Jika mesej diterima dan balasan diterima, paparan mesej biasanya bermula dengan
<
:bash< Hello, anda telah hantar: Hello ServBay melalui wscat
1Pada terminal pelayan, anda juga akan melihat log berkaitan.
Untuk memutuskan sambungan wscat
, tekan Ctrl + C
.
Perhatian
- Konflik Port: Pastikan port pelayan Swoole (contoh: 9501, 9502) tidak digunakan oleh aplikasi lain. Jika berlaku konflik, pelayan tidak akan dapat dimulakan.
- Versi PHP: Semak versi PHP yang digunakan (pastikan ia adalah versi yang telah diaktifkan Swoole dalam ServBay). Gunakan arahan
php -v
untuk pengesahan. ServBay biasanya menyediakan alat untuk tukar versi PHP dengan mudah. - Status Sambungan: Jika pelayan gagal dimulakan, pastikan sambungan Swoole diaktifkan betul untuk versi PHP semasa dan ServBay serta servis PHP telah dimulakan semula.
- Pengurusan Proses Kekal: Pelayan Swoole berjalan sebagai proses kekal dalam memori. Untuk persekitaran produksi, gunakan pengurus proses seperti Supervisor, Systemd atau pm2 untuk memastikan pelayan Swoole boleh dimulakan semula secara automatik jika terhenti. Dalam pembangunan tempatan menggunakan ServBay, jalankannya dari terminal secara manual sudah mencukupi.
Kesimpulan
ServBay membolehkan anda mengaktifkan dan menggunakan sambungan Swoole dengan mudah, lalu membina dan menguji aplikasi PHP berprestasi tinggi dalam persekitaran tempatan—sama ada untuk servis HTTP tradisional ataupun aplikasi komunikasi masa nyata WebSocket moden. Gabungan kehebatan Swoole dan kemudahan ServBay membuka lebih banyak potensi untuk pembangun PHP. Cubalah Swoole dalam ServBay sekarang dan bina aplikasi yang lebih pantas dan mantap!