Membina & Menjalankan Projek Webman dalam ServBay
Apa itu Webman?
Webman ialah kerangka web PHP asinkron berprestasi tinggi berasaskan Workerman, direka khusus untuk membina aplikasi web berskala besar dan berprestasi tinggi. Tidak seperti kerangka penyekat segerak tradisional, Webman menggunakan model pemacu-acara (event-driven) dan I/O asinkron tanpa penyekatan, menjadikannya sangat cekap dalam mengendalikan permintaan serentak dalam kuantiti besar. Webman menyediakan API yang ringkas serta mesra pengguna dan mekanisma peluasan yang fleksibel, sangat sesuai untuk membangunkan aplikasi masa nyata, servis API, mikroservis, dan sebagainya.
Ciri-ciri Utama & Kelebihan Webman
- Prestasi Tinggi: Berasaskan Workerman dengan event-driven I/O asinkron tanpa penyekatan, dapat mengendalikan sambungan serentak secara besar-besaran, dengan throughput jauh mengatasi kerangka tradisional.
- Senang Digunakan: API yang jelas & intuitif serta fitur lengkap, memudahkan pembangun untuk bermula dengan cepat.
- Sokongan Pelbagai Protokol: Dilengkapi sokongan untuk HTTP, WebSocket dan pelbagai protokol aplikasi lain, memudahkan pembangunan pelbagai jenis servis.
- Peluasan Fleksibel: Menyokong peluasan ciri dengan pakej, plugin dan middleware melalui Composer dengan mudah.
- Penggunaan Sumber Rendah: Berbanding mode pelayan web + PHP-FPM tradisional, Webman sebagai aplikasi sentiasa dalam memori memerlukan sumber daya lebih sedikit.
- Komuniti Sokongan Kukuh: Komuniti pembangun yang aktif dengan sumber dokumentasi yang menyeluruh.
Webman membolehkan pembangun membina aplikasi web dan servis API yang berprestasi dan boleh dipercayai dengan pantas, amat sesuai untuk situasi dengan permintaan serentak yang tinggi dan latensi rendah.
Membina & Menjalankan Projek Webman dalam ServBay
Panduan ini menerangkan secara terperinci bagaimana untuk mencipta dan menjalankan projek Web yang ringkas menggunakan Webman dalam persekitaran pembangunan setempat ServBay. Kami akan tunjukkan cara memasang Webman, menulis kod laluan dan pengawal asas, serta mengintegrasikan pangkalan data (MySQL, PostgreSQL) dan perkhidmatan cache (Redis, Memcached) yang disediakan ServBay.
TIP
ServBay menyarankan pembangun meletakkan semua projek laman web tempatan di direktori /Applications/ServBay/www
untuk kemudahan pengurusan pusat oleh ServBay, seperti konfigurasi laman web tempatan (sebelum ini dikenali sebagai "host").
Prasyarat
Sebelum bermula, pastikan anda telah:
- Memasang ServBay: Anda telah memasang ServBay dengan jayanya pada macOS anda. ServBay menyediakan persekitaran pembangunan setempat menyeluruh termasuk PHP, Composer, MySQL, PostgreSQL, Redis, Memcached dan semua perisian yang diperlukan oleh tutorial ini.
- Mengaktifkan Perisian Berkaitan: Melalui panel kawalan ServBay, pastikan perisian berikut telah dipasang dan dijalankan:
- Versi PHP pilihan anda (disyorkan yang terkini, misalnya PHP 8.x)
- Composer (sudah disertakan dalam ServBay)
- MySQL
- PostgreSQL
- Redis
- Memcached
- Pastikan versi PHP yang dipilih telah aktifkan pelanjutan seperti
memcached
,redis
,pdo_mysql
,pdo_pgsql
. Lazimnya, pelanjutan biasa ini telah diaktifkan secara lalai oleh ServBay dan boleh disemak di tetapan konfigurasi PHP ServBay.
- Akses Terminal: Mahir menggunakan aplikasi Terminal di macOS.
Memasang Webman
Sahkan Composer Tersedia
ServBay telah menyediakan Composer siap digunakan, boleh terus digunakan dalam terminal. Sahkan dengan menjalankan arahan berikut di terminal:
bashcomposer --version
1Jika versi Composer dipaparkan dengan betul, Composer anda sudah bersedia.
Masuk ke Direktori Laman Web ServBay
Buka terminal dan masuk ke direktori akar laman web seperti disaran ServBay:
bashcd /Applications/ServBay/www
1Cipta Projek Webman Menggunakan Composer
Pasang kerangka Webman ke dalam direktori pilihan menggunakan arahan
create-project
Composer. Kita namakan projek iniservbay-webman-app
:bashcomposer create-project workerman/webman servbay-webman-app
1Composer akan memuat turun Webman dan kebergantungannya ke direktori
servbay-webman-app
.Masuk ke Direktori Projek
Selesai pemasangan, masuk ke direktori projek yang baru:
bashcd servbay-webman-app
1Pasang Komponen Penting
Untuk demo pangkalan data dan cache, kita perlukan beberapa pakej tambahan. Webman lazimnya menggunakan
illuminate/database
(dari Laravel),illuminate/redis
dan lain-lain. Pilihan-W
(--with-dependencies
) membantu menyelesaikan konflik kebergantungan.bashcomposer require -W illuminate/database illuminate/redis illuminate/pagination illuminate/events symfony/var-dumper
1Arahan ini akan memasang ORM pangkalan data, klien Redis, komponen pagination, pengatur acara, dan utiliti VarDumper untuk debugging.
Cipta Pangkalan Data dan Jadual
Agar kod contoh dapat berfungsi, kita perlu cipta pangkalan data yang berkaitan dan jadual users
dalam MySQL dan PostgreSQL ServBay. Kata laluan lalai pengguna pangkalan data root
ServBay ialah password
.
Anda boleh gunakan alat pengurusan pangkalan data yang disediakan ServBay seperti phpMyAdmin atau pgAdmin (akses melalui panel kawalan ServBay) atau gunakan command line untuk melaksanakan arahan SQL berikut.
Cipta Pangkalan Data
webman_app
- MySQL:sql
CREATE DATABASE IF NOT EXISTS webman_app CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
1 - PostgreSQL:sql
CREATE DATABASE webman_app;
1
- MySQL:
Cipta Jadual
users
dalam Pangkalan Datawebman_app
- MySQL:sql
USE webman_app; CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
1
2
3
4
5
6
7 - PostgreSQL:sql
\c webman_app; -- Sambung ke pangkalan data yang baru dicipta CREATE TABLE users ( id SERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
1
2
3
4
5
6
7
- MySQL:
Menulis Kod Projek Web
Seterusnya, tambah kod untuk mendefinisikan laluan, mencipta pengawal, dan melaksanakan logik interaksi dengan pangkalan data serta cache.
Konfigurasi Laluan
Edit fail
config/route.php
di akar projek dan tambah kod berikut untuk mendefinisikan laluan berkaitan demo:php<?php use Webman\Route; use app\controller\IndexController; use app\controller\CacheController; use app\controller\DatabaseController; // Laluan akar, mapping ke kaedah index di IndexController Route::any('/', [IndexController::class, 'index']); // Laluan berkaitan cache Route::any('/memcached', [CacheController::class, 'memcached']); Route::any('/redis', [CacheController::class, 'redis']); // Laluan berkaitan pangkalan data Route::any('/mysql-add', [DatabaseController::class, 'mysqlAdd']); Route::any('/mysql', [DatabaseController::class, 'mysqlGet']); Route::any('/pgsql-add', [DatabaseController::class, 'pgsqlAdd']); Route::any('/pgsql', [DatabaseController::class, 'pgsqlGet']); // Anda boleh tambah lebih banyak laluan di sini...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21Cipta Fail Pengawal
Dalam direktori
app/controller
, cipta failIndexController.php
,CacheController.php
, danDatabaseController.php
, dan isi masing-masing dengan kod berikut.app/controller/IndexController.php
: Mengendalikan permintaan ke laluan akar.php<?php namespace app\controller; use support\Request; use support\Response; // Import kelas Response class IndexController { /** * Contoh kaedah untuk mengendalikan permintaan akar * @param Request $request Objek request semasa * @return Response Kembali objek Response */ public function index(Request $request): Response // Tentukan jenis pemulangan { // Kembalikan respons teks ringkas return response('Hello ServBay & Webman!'); // Ubah mesej selamat datang } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20app/controller/CacheController.php
: Demo penggunaan Memcached dan Redis.php<?php namespace app\controller; use support\Request; use support\Response; use Memcached; // Import kelas Memcached use support\Redis; // Import Redis Facade dari Webman class CacheController { /** * Demo penggunaan Memcached * @param Request $request * @return Response */ public function memcached(Request $request): Response { // Sambung ke pelayan Memcached, ServBay secara lalai beroperasi di 127.0.0.1:11211 $memcached = new Memcached(); $memcached->addServer('127.0.0.1', 11211); // Set item cache, sah selama 60 saat $success = $memcached->set('servbay_key', 'Hello Memcached from ServBay!', 60); // Ubah key & value if (!$success) { return response('Failed to set Memcached key', 500); } // Ambil item cache $value = $memcached->get('servbay_key'); // Ubah key // Kembalikan nilai yang diperoleh return response($value ?: 'Memcached key not found or expired'); // Papar jika tiada } /** * Demo penggunaan Redis * @param Request $request * @return Response */ public function redis(Request $request): Response { // Set item cache menggunakan Redis Facade Webman Redis::set('servbay_redis_key', 'Hello Redis from ServBay!'); // Ubah key & value // Ambil item cache menggunakan Redis Facade $value = Redis::get('servbay_redis_key'); // Ubah key // Kembalikan nilai yang diperoleh return response($value ?: 'Redis key not found'); // Papar jika tiada } }
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
50
51
52app/controller/DatabaseController.php
: Demo operasi MySQL & PostgreSQL.php<?php namespace app\controller; use support\Request; use support\Response; use support\Db; // Import Db Facade dari Webman class DatabaseController { /** * Tambah pengguna ke pangkalan data MySQL * @param Request $request * @return Response */ public function mysqlAdd(Request $request): Response { try { // Sambung ke pangkalan data 'mysql' & masukkan data Db::connection('mysql')->table('users')->insert([ 'name' => 'ServBay Webman MySQL User', // Kemaskini data demo 'email' => 'mysql_demo@servbay.test', // Kemaskini emel contoh 'created_at' => date('Y-m-d H:i:s') // Tambah created_at ]); return response('User added to MySQL'); // Kemaskini mesej respons } catch (\Exception $e) { return response('Error adding user to MySQL: ' . $e->getMessage(), 500); // Jika ralat } } /** * Dapatkan senarai pengguna dari MySQL * @param Request $request * @return Response */ public function mysqlGet(Request $request): Response { try { // Sambung ke 'mysql' & dapatkan semua pengguna $users = Db::connection('mysql')->table('users')->get(); // Kembalikan dalam format JSON return response(json_encode($users), 200, ['Content-Type' => 'application/json']); // Tetapkan Content-Type } catch (\Exception $e) { return response('Error getting users from MySQL: ' . $e->getMessage(), 500); // Jika ralat } } /** * Tambah pengguna ke pangkalan data PostgreSQL * @param Request $request * @return Response */ public function pgsqlAdd(Request $request): Response { try { // Sambung ke 'pgsql' & masukkan data Db::connection('pgsql')->table('users')->insert([ 'name' => 'ServBay Webman PgSQL User', // Kemaskini data demo 'email' => 'pgsql_demo@servbay.test', // Kemaskini emel contoh 'created_at' => date('Y-m-d H:i:s') // Tambah created_at ]); return response('User added to PostgreSQL'); // Kemaskini mesej respons } catch (\Exception $e) { return response('Error adding user to PostgreSQL: ' . $e->getMessage(), 500); // Jika ralat } } /** * Dapatkan senarai pengguna dari PostgreSQL * @param Request $request * @return Response */ public function pgsqlGet(Request $request): Response { try { // Sambung ke 'pgsql' & dapatkan semua pengguna $users = Db::connection('pgsql')->table('users')->get(); // Kembalikan dalam format JSON return response(json_encode($users), 200, ['Content-Type' => 'application/json']); // Tetapkan Content-Type } catch (\Exception $e) { return response('Error getting users from PostgreSQL: ' . $e->getMessage(), 500); // Jika ralat } } }
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
Konfigurasi Sambungan Pangkalan Data
Edit fail
config/database.php
di akar projek untuk tetapan sambungan MySQL dan PostgreSQL. Maklumat default ServBay ialah hos127.0.0.1
, port3306
(MySQL) dan5432
(PostgreSQL), penggunaroot
, kata laluanpassword
.php<?php /** * Konfigurasi pangkalan data */ return [ // Tetapan sambungan pangkalan data default 'default' => 'mysql', // Senarai konfigurasi sambungan 'connections' => [ 'mysql' => [ 'driver' => 'mysql', // Hos & port MySQL ServBay 'host' => '127.0.0.1', 'port' => 3306, // Nama pangkalan data dicipta sebelum ini 'database' => 'webman_app', // Nama pengguna MySQL ServBay 'username' => 'root', // Kata laluan MySQL ServBay 'password' => 'password', 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'strict' => true, 'engine' => null, ], 'pgsql' => [ 'driver' => 'pgsql', // Hos & port PostgreSQL ServBay 'host' => '127.0.0.1', 'port' => 5432, // Nama pangkalan data dicipta sebelum ini 'database' => 'webman_app', // Nama pengguna PostgreSQL ServBay 'username' => 'root', // Kata laluan PostgreSQL ServBay 'password' => 'password', 'charset' => 'utf8', 'prefix' => '', 'schema' => 'public', 'sslmode' => 'prefer', // atau require, verify-ca, verify-full ], // Anda boleh tambah lebih banyak sambungan di sini... ], ];
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
46Peringatan Penting: Dalam pengeluaran, sentiasa ubah kata laluan pangkalan data lalai dan elak lekat maklumat sensitif dalam kod sumber.
Menjalankan Projek Webman
Projek Webman biasanya dimulakan dengan skrip start.php
yang dibekalkan, melancarkan proses Workerman. Ini berbeza dengan cara tradisional menggunakan Nginx/Apache + PHP-FPM; Webman adalah aplikasi asinkron yang sentiasa berada dalam memori.
Di direktori projek (/Applications/ServBay/www/servbay-webman-app
), jalankan arahan berikut untuk memulakan projek Webman:
bash
php start.php start
1
Selepas dijalankan, anda akan lihat maklumat permulaan Webman. Secara lalai, ia akan mendengar permintaan HTTP di 127.0.0.1:8787
.
- Nota: Arahan
php
ini akan menggunakan PHP dari persekitaran ServBay. ServBay mengkonfigurasi terminal anda agar dapat gunakan PHP versi dipasang ServBay secara terus. - Untuk jalankan Webman di latar belakang, tambah parameter
-d
:php start.php start -d
. - Untuk hentikan servis Webman:
php start.php stop
. - Untuk mulakan semula Webman:
php start.php restart
. - Untuk mulakan semula dengan lancar (tanpa gangguan trafik):
php start.php reload
.
Uji Projek
Selepas Webman berjaya dimulakan dan mendengar di 127.0.0.1:8787
, anda boleh akses URL berikut di pelayar untuk menguji fungsi:
http://localhost:8787/
: Paparan mesejHello ServBay & Webman!
.http://localhost:8787/memcached
: Paparan mesejHello Memcached from ServBay!
. Bermaksud anda berjaya menghubungkan Webman dengan Memcached ServBay.http://localhost:8787/redis
: Paparan mesejHello Redis from ServBay!
. Bermaksud anda berjaya menghubungkan Webman dengan Redis ServBay.http://localhost:8787/mysql-add
: Paparan mesejUser added to MySQL
. Ini akan menambah rekod ke jadualusers
dalam pangkalan data MySQL.http://localhost:8787/mysql
: Paparan output format JSON berisi senarai pengguna dari jadualusers
MySQL.http://localhost:8787/pgsql-add
: Paparan mesejUser added to PostgreSQL
. Ini akan menambah rekod ke jadualusers
PostgreSQL.http://localhost:8787/pgsql
: Paparan output format JSON berisi senarai pengguna dari jadualusers
PostgreSQL.
Jika anda mengalami masalah semasa mengakses URL di atas, semak sama ada terdapat mesej ralat di terminal Webman dan pastikan servis MySQL, PostgreSQL, Redis, Memcached berjalan dalam ServBay serta pelanjutan PHP berkaitan diaktifkan.
Soalan Lazim (FAQ)
- S: Arahan
php start.php start
tidak ditemui?- J: Pastikan anda telah berada di direktori projek
servbay-webman-app
dalam terminal. Sahkan juga PHP versi ServBay telah ditambah ke PATH sistem anda (ServBay biasanya menambahkannya secara automatik).
- J: Pastikan anda telah berada di direktori projek
- S: Gagal sambung ke
localhost:8787
?- J: Semak output terminal semasa jalankan
php start.php start
untuk mesej ralat. Pastikan port8787
tidak digunakan aplikasi lain. Jika perlu, ubah port dalam fail konfigurasi Webman (misal diconfig/server.php
).
- J: Semak output terminal semasa jalankan
- S: Gagal sambung pangkalan data?
- J: Pastikan perkhidmatan MySQL dan PostgreSQL ServBay sedang berjalan. Semak maklumat sambungan dalam
config/database.php
(hos, port, nama, pengguna, kata laluan) agar sepadan dengan konfigurasi ServBay (lalai: penggunaroot
, kata laluanpassword
). Pastikan anda telah mencipta pangkalan datawebman_app
dan jadualusers
.
- J: Pastikan perkhidmatan MySQL dan PostgreSQL ServBay sedang berjalan. Semak maklumat sambungan dalam
- S: Memcached/Redis gagal disambung?
- J: Pastikan perkhidmatan Memcached dan Redis ServBay berjalan. Periksa alamat & port sambungan dalam
app/controller/CacheController.php
(lalai:127.0.0.1:11211
&127.0.0.1:6379
). Sah PHP versi anda telah aktifkan pelanjutanmemcached
&redis
.
- J: Pastikan perkhidmatan Memcached dan Redis ServBay berjalan. Periksa alamat & port sambungan dalam
Ringkasan
Melalui langkah di atas, anda telah berjaya mencipta, mengkonfigurasi dan menjalankan projek Webman asas dalam persekitaran pembangunan lokal ServBay. Anda telah belajar menggunakan perkhidmatan serba lengkap ServBay, menyediakan persekitaran Webman dengan cepat dan mengintegrasikan pangkalan data serta cache. Gabungan prestasi tinggi Webman dan kemudahan ServBay menyediakan platform kukuh untuk pembangunan aplikasi PHP asinkron anda. Diharapkan panduan ini membantu anda memanfaatkan ServBay dan Webman untuk membina aplikasi web yang cemerlang.