Membangun Aplikasi PHP Berprestasi Tinggi dengan Swoole di ServBay
ServBay ialah sebuah lingkungan pembangunan web lokal yang direka khusus untuk pembangun, dengan pelbagai lingkungan bahasa, pangkalan data, dan alat yang telah disatukan untuk memudahkan proses pembangunan. Dalam panduan ini, kami akan menumpukan pada cara memanfaatkan ekstensi Swoole dalam lingkungan ServBay untuk memperkuat aplikasi PHP anda dan membina servis rangkaian berprestasi tinggi.
Apa Itu Swoole?
Swoole merupakan enjin komunikasi rangkaian sejajar dan berprestasi tinggi berdasarkan korutin (Coroutine) untuk PHP. Ia ditulis sepenuhnya dalam C dan membekalkan kemampuan komunikasi rangkaian asinkron, sejajar, dan berasaskan korutin untuk PHP. Dengan Swoole, pembangun PHP tidak lagi dibatasi oleh model permintaan–tindak balas pelayan web tradisional (seperti Apache/Nginx + PHP-FPM), dan kini dapat mengendalikan tugas berskala besar dengan lebih efisien—misalnya, membina pelayan web yang sentiasa berada dalam memori, pemprosesan tugasan asinkron, servis komunikasi masa nyata (seperti WebSocket), dan banyak lagi.
Ciri-ciri Utama Swoole:
- Prestasi Tinggi: Pelaksanaan di peringkat C menyediakan I/O asinkron dengan sokongan multi-proses/multi-benang.
- Korutin: Menyediakan korutin ringan bagi membolehkan kod segerak dilaksanakan secara asinkron serta memudahkan model pengaturcaraan asinkron.
- Sokongan Protokol Kaya: Sokongan asli untuk pelbagai protokol rangkaian seperti TCP/UDP/HTTP/WebSocket.
- Mudah Digunakan: Membekalkan API ringkas yang sesuai dengan amalan PHP.
- Sentiasa Dalam Memori: Aplikasi dapat dijalankan sebagai proses sentiasa aktif, mengelakkan beban inisialisasi setiap permintaan seperti aplikasi PHP tradisional.
Berkat Swoole, PHP tidak lagi terhad sebagai bahasa skrip untuk pembangunan web semata-mata, malah sesuai untuk pelbagai senario aplikasi rangkaian berprestasi tinggi yang moden.
Mengaktifkan Swoole dalam ServBay
Salah satu objektif reka bentuk ServBay ialah memudahkan pembangun mengurus dan menggunakan pelbagai ekstensi PHP. Swoole, sebagai ekstensi utama untuk pembangunan PHP berprestasi tinggi masa kini, telah disatukan dan tersedia sedia dalam ServBay. Anda hanya perlu beberapa langkah ringkas untuk mengaktifkannya.
Keperluan:
- ServBay telah dipasang dan berjalan.
- Pastikan sekurang-kurangnya satu versi PHP telah dipasang dalam ServBay.
Langkah Pengaktifan:
- Buka antarmuka aplikasi ServBay.
- Navigasi ke bahagian "Pakej (Packages)" atau pengurusan versi PHP. (Nota: Berdasarkan versi ServBay, nama menu mungkin sedikit berbeza, biasanya terletak di antarmuka utama atau tetapan)
- Pilih versi PHP yang ingin anda aktifkan Swoole.
- Cari pilihan ekstensi Swoole dan tandakan untuk mengaktifkannya. ServBay biasanya memaparkan ekstensi yang telah disusun dalam bentuk senarai atau suis.
- Simpan perubahan dan ikuti arahan untuk memulakan semula ServBay atau servis PHP berkaitan. ServBay akan mengkonfigurasi lingkungan PHP secara automatik agar memuatkan ekstensi Swoole.
Setelah langkah-langkah di atas selesai, anda boleh mula menggunakan Swoole dalam versi PHP yang dipilih. Anda boleh mengesahkan sama ada swoole
telah dimuat melalui baris arahan dengan menjalankan php -m
dan memastikan swoole
tersenarai antara ekstensi yang telah dimuatkan.
TIP
Secara lalai, ServBay mengesyorkan anda untuk meletakkan laman web dan fail projek anda di direktori /Applications/ServBay/www
, bagi memudahkan pengurusan dan konfigurasi laman dalam ServBay. Dalam contoh panduan ini, kami juga akan menggunakan laluan ini.
Membina Pelayan HTTP Swoole Ringkas
Seterusnya, kita akan mencipta sebuah pelayan HTTP Swoole asas untuk mendemonstrasikan cara memproses permintaan web.
Langkah 1: Cipta Direktori Projek
Buka terminal, cipta dan masuk ke dalam direktori projek baharu. Mengikuti saranan ServBay, letakkan ia di bawah /Applications/ServBay/www
:
bash
cd /Applications/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 pada semua antaramuka rangkaian (0.0.0.0) port 9501
$server = new Server("0.0.0.0", 9501);
// Daftarkan fungsi panggil balik acara 'start'
// Dicetuskan apabila pelayan berjaya bermula
$server->on("start", function (Server $server) {
echo "Swoole HTTP server is started at http://0.0.0.0:9501\n";
// Anda boleh rekod PID proses utama, PID pengurusan, dsb. di sini
});
// Daftarkan fungsi panggil balik acara 'request'
// Dicetuskan apabila permintaan HTTP baharu diterima
$server->on("request", function (Request $request, Response $response) {
// Tetapkan header respons
$response->header("Content-Type", "text/plain");
// Proses logik berdasarkan laluan atau parameter permintaan
$path = $request->server['request_uri'] ?? '/';
$content = "Hello ServBay!";
if ($path === '/info') {
$content = "Request path: " . $path . "\n";
$content .= "Method: " . $request->server['request_method'] . "\n";
$content .= "Client IP: " . $request->server['remote_addr'] . "\n";
// Maklumat permintaan lain boleh diperoleh dari objek $request
}
// Hantar badan respons dan tamatkan permintaan
$response->end($content);
});
// Mula 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 mencipta sebuah pelayan HTTP Swoole yang mendengar pada port 9501. Apabila permintaan diterima, ia akan menghantar respons teks ringkas "Hello ServBay!". Jika anda melawati laluan /info
, skrip ini akan memulangkan beberapa maklumat tentang permintaan.
Langkah 3: Jalankan Pelayan Swoole
Pastikan direktori kerja di terminal adalah servbay-swoole-http
. Gunakan versi PHP dalam ServBay yang telah diaktifkan Swoole untuk menjalankan skrip:
bash
php server.php
1
Jika berjaya, anda akan melihat output berikut di terminal:
bash
Swoole HTTP server is started at http://0.0.0.0:9501
1
Ini bermakna pelayan HTTP Swoole kini berjalan di latar belakang dan mendengar pada port 9501.
Langkah 4: Akses Pelayan Swoole
Buka pelayar web anda dan lawati alamat berikut:
http://localhost:9501
http://localhost:9501/info
Anda akan melihat halaman web masing-masing memaparkan Hello ServBay!
dan maklumat teks mengenai permintaan.
Untuk menghentikan pelayan, kembali ke terminal yang menjalankan skrip dan tekan Ctrl + C
.
Mengendalikan Sambungan WebSocket dengan Swoole
Swoole menyediakan sokongan asli untuk protokol WebSocket, sangat sesuai untuk membangunkan aplikasi komunikasi masa nyata seperti bilik sembang, pelayan permainan, atau servis push data secara langsung.
Langkah 1: Tulis Skrip Pelayan WebSocket
Dalam direktori /Applications/ServBay/www/servbay-swoole-http
(atau cipta direktori baharu seperti servbay-swoole-websocket
), cipta fail bernama websocket_server.php
dan tambah kandungan berikut:
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 juga boleh kendali permintaan HTTP
$server = new Server("0.0.0.0", 9502); // Dengar port 9502
// Daftarkan acara 'start', dicetuskan apabila pelayan dimulakan
$server->on("start", function (Server $server) {
echo "Swoole WebSocket server is started at ws://0.0.0.0:9502\n";
});
// Daftarkan acara 'open'
// Dicetuskan apabila sambungan WebSocket baru dibuka
// Objek $request mengandungi maklumat klien seperti $request->fd
$server->on("open", function (Server $server, Request $request) {
echo "connection open: {$request->fd}\n";
// Anda boleh menghantar mesej ucapan kepada klien
$server->push($request->fd, "Welcome to ServBay WebSocket Demo!");
});
// Daftarkan acara 'message'
// Dicetuskan apabila pelayan menerima mesej WebSocket dari klien
// Objek $frame mengandungi maklumat mesej; $frame->data adalah isi mesej, $frame->fd adalah pemegang klien
$server->on("message", function (Server $server, Frame $frame) {
echo "received message from {$frame->fd}: {$frame->data}\n";
// Siar mesej kepada semua klien, atau balas kepada pengirim
// Contoh: balas kepada pengirim
$server->push($frame->fd, "Hello, you sent: {$frame->data}");
// Contoh siaran (perlu senarai sambungan atau melalui)
// foreach ($server->connections as $fd) {
// if ($fd != $frame->fd) { // Jangan hantar kepada pengirim sendiri
// $server->push($fd, "User {$frame->fd} says: {$frame->data}");
// }
// }
});
// Daftarkan acara 'close'
// Dicetuskan apabila klien menutup sambungan
$server->on("close", function ($ser, $fd) {
echo "connection close: {$fd}\n";
});
// Mula 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 membina pelayan WebSocket Swoole yang mendengar pada port 9502 dan mendefinisikan callback utama untuk acara utama: start
(pelayan dimulakan), open
(sambungan telah dibuat), message
(menerima mesej), dan close
(sambungan ditutup). Dalam acara message
, pelayan akan membalas mesej yang diterima dengan menambah awalan khas.
Langkah 2: Jalankan Pelayan WebSocket
Pastikan terminal berada dalam direktori tempat anda meletakkan websocket_server.php
. Jalankan skrip menggunakan versi PHP dalam ServBay yang telah diaktifkan Swoole:
bash
php websocket_server.php
1
Jika berjaya, anda akan melihat output di terminal:
bash
Swoole WebSocket server is started at ws://0.0.0.0:9502
1
Ini bermakna pelayan WebSocket Swoole kini berjalan di latar belakang dan mendengar pada port 9502.
Langkah 3: Sambung ke Pelayan WebSocket
Terdapat pelbagai cara untuk menguji sambungan ke pelayan WebSocket ini.
Kaedah A: Menggunakan Alat Pembangun Pelayar
Kebanyakan pelayar moden menawarkan panel "Network" atau "Console" dalam alat pembangunnya (tekan F12). Ini boleh digunakan untuk menguji sambungan WebSocket.
Buka mana-mana laman web (contoh,
about:blank
).Buka alat pembangun dan tukar ke panel "Console".
Masukkan kod JavaScript berikut untuk membuat sambungan:
javascriptvar ws = new WebSocket("ws://localhost:9502"); ws.onopen = function(event) { console.log("WebSocket connection opened:", event); ws.send("Hello from Browser!"); // Hantar mesej selepas sambungan berjaya }; ws.onmessage = function(event) { console.log("Message from server:", event.data); // Terima mesej }; ws.onerror = function(event) { console.error("WebSocket error:", event); // Ralat berlaku }; ws.onclose = function(event) { console.log("WebSocket connection closed:", event); // Sambungan ditutup }; // Anda boleh menggunakan ws.send("mesej anda") untuk menghantar mesej // Guna ws.close() untuk menutup sambungan
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21Jalankan kod di konsol dan pantau output. Anda juga dapat melihat log sambungan dan mesej di terminal yang menjalankan
websocket_server.php
.
Kaedah B: Menggunakan Alat Baris Perintah wscat
wscat
ialah klien WebSocket baris perintah berasaskan Node.js yang mudah digunakan.
Pasang
wscat
: Jika Node.js dan npm belum dipasang, lakukan pemasangan terlebih dahulu. Seterusnya, pasangwscat
secara global melalui npm:bashnpm install -g wscat
1Sambung ke pelayan WebSocket: Gunakan perintah berikut dalam terminal:
bashwscat -c ws://localhost:9502
1Jika berjaya, simbol
>
akan terpapar.Hantar mesej: Taip mesej yang anda ingin hantarkan dan tekan Enter:
bash> Hello ServBay via wscat
1Pelayan akan membalas, dan anda akan melihat output (biasanya bermula dengan
<
):bash< Hello, you sent: Hello ServBay via wscat
1Pada masa yang sama, anda akan melihat log berkaitan di terminal yang menjalankan
websocket_server.php
.
Untuk memutuskan sambungan wscat
, tekan Ctrl + C
.
Perhatian
- Konflik Port: Pastikan port yang digunakan oleh pelayan Swoole (misalnya 9501, 9502) tidak digunakan oleh aplikasi lain pada sistem anda. Jika berlaku konflik port, pelayan Swoole tidak dapat dimulakan.
- Versi PHP: Sila pastikan anda menjalankan skrip menggunakan versi PHP yang telah diaktifkan Swoole dalam ServBay. Anda boleh semak versi PHP semasa dengan
php -v
. ServBay biasanya menawarkan alat baris perintah mudah untuk menukar versi PHP aktif. - Status Ekstensi: Jika pelayan gagal dimulakan, semak semula sama ada ekstensi Swoole telah diaktifkan secara betul untuk versi PHP yang anda gunakan, dan pastikan anda telah memulakan semula ServBay atau servis PHP agar perubahan berkuatkuasa.
- Pengurusan Proses Sentiasa Aktif: Pelayan Swoole dijalankan sebagai proses yang sentiasa aktif dalam memori. Untuk produksi, anda perlu menggunakan alat pengurusan proses seperti Supervisor, Systemd, pm2 dan sebagainya untuk memastikan proses Swoole sentiasa berjalan dan boleh mula semula secara automatik jika berlaku kegagalan. Dalam lingkungan pembangunan lokal ServBay, menjalankan pelayan secara manual dalam terminal biasanya memadai.
Ringkasan
Dengan ServBay, anda boleh mengaktifkan dan menggunakan ekstensi Swoole dengan mudah untuk membina serta menguji aplikasi PHP berprestasi tinggi dalam lingkungan pembangunan lokal, sama ada untuk pelayan HTTP tradisional mahupun aplikasi komunikasi masa nyata WebSocket era moden. Gabungan kehebatan Swoole dengan kemudahan pembangunan yang disediakan oleh ServBay membuka potensi baharu buat pembangun PHP—membolehkan anda menghasilkan aplikasi yang lebih efisien serta kuat. Cuba Swoole dalam ServBay hari ini!