Sử dụng Swoole tạo ứng dụng PHP hiệu suất cao
Swoole là gì?
Swoole là một khung giao tiếp mạng hiệu suất cao cho PHP, cung cấp các chức năng như không đồng bộ, đa luồng và coroutine, giúp PHP có thể xử lý các tác vụ đồng thời cao giống như Node.js. Nó hỗ trợ nhiều loại giao thức như TCP, UDP, UnixSocket, HTTP, WebSocket và thích hợp để xây dựng các máy chủ web hiệu suất cao, kiến trúc microservice, hệ thống giao tiếp thời gian thực, v.v.
Các tính năng và lợi ích chính của Swoole
- Hiệu suất cao: Swoole được viết bằng ngôn ngữ C, có hiệu suất cực kỳ cao, hỗ trợ IO không đồng bộ và coroutine, có thể xử lý các yêu cầu đồng thời cao.
- Chức năng phong phú: Hỗ trợ nhiều giao thức mạng, bộ hẹn giờ, quản lý tiến trình, quản lý bộ nhớ, v.v., đáp ứng các nhu cầu phát triển khác nhau.
- Dễ sử dụng: Cung cấp API dễ sử dụng và tài liệu phong phú, giúp các nhà phát triển nhanh chóng làm quen với nó.
- Khả năng mở rộng mạnh mẽ: Hỗ trợ mở rộng và plugin tùy chỉnh, có thể linh hoạt tùy chỉnh theo nhu cầu.
Swoole là lựa chọn lý tưởng để xây dựng ứng dụng web hiệu suất cao và hệ thống giao tiếp thời gian thực, thích hợp cho các dự án từ nhỏ đến hệ thống cấp doanh nghiệp lớn.
Cài đặt Swoole
Trong bài viết này, chúng tôi sẽ giới thiệu cách cài đặt và sử dụng Swoole trong môi trường ServBay.
TIP
ServBay khuyên các nhà phát triển đặt trang web vào thư mục /Applications/ServBay/www
để dễ quản lý.
Bước 1: Cài đặt mở rộng Swoole
Kích hoạt mở rộng Swoole
ServBay đã tích hợp sẵn mở rộng Swoole, người dùng cần mở và khởi động lại PHP. Vui lòng tham khảo bài viết Cách kích hoạt mô-đun Swoole tích hợp của ServBay để kích hoạt mô-đun Swoole.
Bước 2: Tạo thư mục dự án
Tạo thư mục dự án và chuyển vào đó:
cd /Applications/ServBay/www
mkdir servbay-swoole-app
cd servbay-swoole-app
2
3
Bước 3: Tạo script máy chủ Swoole
Trong thư mục dự án, tạo một file server.php
, viết một máy chủ HTTP Swoole đơn giản:
<?php
use Swoole\Http\Server;
use Swoole\Http\Request;
use Swoole\Http\Response;
$server = new Server("0.0.0.0", 9501);
$server->on("start", function (Server $server) {
echo "Swoole HTTP server is started at http://0.0.0.0:9501\n";
});
$server->on("request", function (Request $request, Response $response) {
$response->header("Content-Type", "text/plain");
$response->end("Hello ServBay!");
});
$server->start();
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Bước 4: Chạy máy chủ Swoole
Trong terminal, chạy lệnh sau để khởi động máy chủ Swoole:
php server.php
Bạn sẽ thấy đầu ra sau:
Swoole HTTP server is started at http://0.0.0.0:9501
Bước 5: Truy cập máy chủ Swoole
Mở trình duyệt, truy cập http://localhost:9501
, bạn sẽ thấy trang web hiển thị Hello ServBay!
.
Sử dụng Swoole xây dựng ứng dụng web
Trong phần này, chúng tôi sẽ giới thiệu cách sử dụng Swoole để xây dựng một ứng dụng web đơn giản.
Tạo bộ điều khiển và route
Trong thư mục dự án, tạo một thư mục app
và trong đó tạo thư mục controllers
và routes
:
mkdir -p app/controllers
mkdir -p app/routes
2
Trong thư mục app/controllers
, tạo file HomeController.php
:
<?php
namespace App\Controllers;
class HomeController
{
public function index()
{
return "Welcome to ServBay!";
}
public function hello($name)
{
return "Hello, $name!";
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Trong thư mục app/routes
, tạo file web.php
:
<?php
use App\Controllers\HomeController;
return [
'GET /' => [HomeController::class, 'index'],
'GET /hello/{name}' => [HomeController::class, 'hello'],
];
2
3
4
5
6
7
8
Cập nhật script máy chủ Swoole
Cập nhật file server.php
, thêm logic phân tích route và gọi bộ điều khiển:
<?php
use Swoole\Http\Server;
use Swoole\Http\Request;
use Swoole\Http\Response;
use FastRoute\RouteCollector;
use function FastRoute\simpleDispatcher;
require 'vendor/autoload.php';
$server = new Server("0.0.0.0", 9501);
$routes = require __DIR__ . '/app/routes/web.php';
$dispatcher = simpleDispatcher(function (RouteCollector $r) use ($routes) {
foreach ($routes as $route => $handler) {
list($method, $path) = explode(' ', $route);
$r->addRoute($method, $path, $handler);
}
});
$server->on("start", function (Server $server) {
echo "Swoole HTTP server is started at http://0.0.0.0:9501\n";
});
$server->on("request", function (Request $request, Response $response) use ($dispatcher) {
$routeInfo = $dispatcher->dispatch($request->server['request_method'], $request->server['request_uri']);
switch ($routeInfo[0]) {
case \FastRoute\Dispatcher::NOT_FOUND:
$response->status(404);
$response->end('404 Not Found');
break;
case \FastRoute\Dispatcher::METHOD_NOT_ALLOWED:
$response->status(405);
$response->end('405 Method Not Allowed');
break;
case \FastRoute\Dispatcher::FOUND:
$handler = $routeInfo[1];
$vars = $routeInfo[2];
list($class, $method) = $handler;
$response->header("Content-Type", "text/plain");
$response->end(call_user_func_array([new $class, $method], $vars));
break;
}
});
$server->start();
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
Cài đặt FastRoute
Trong thư mục gốc của dự án, chạy lệnh sau để cài đặt thư viện route FastRoute:
composer require nikic/fast-route
Chạy máy chủ Swoole
Trong terminal, chạy lệnh sau để khởi động máy chủ Swoole:
php server.php
Truy cập ứng dụng web
Mở trình duyệt, truy cập các URL sau:
http://localhost:9501/
: Bạn sẽ thấy trang web hiển thịWelcome to ServBay!
.http://localhost:9501/hello/ServBay
: Bạn sẽ thấy trang web hiển thịHello, ServBay!
.
Sử dụng Swoole xử lý kết nối WebSocket
Swoole cũng hỗ trợ giao thức WebSocket, có thể sử dụng để xây dựng các ứng dụng giao tiếp thời gian thực. Chúng tôi sẽ giới thiệu cách sử dụng Swoole xử lý kết nối WebSocket.
Tạo script máy chủ WebSocket
Trong thư mục dự án, tạo một file websocket_server.php
, viết một máy chủ WebSocket đơn giản:
<?php
use Swoole\WebSocket\Server;
use Swoole\Http\Request;
use Swoole\WebSocket\Frame;
$server = new Server("0.0.0.0", 9502);
$server->on("start", function (Server $server) {
echo "Swoole WebSocket server is started at ws://0.0.0.0:9502\n";
});
$server->on("open", function (Server $server, Request $request) {
echo "connection open: {$request->fd}\n";
});
$server->on("message", function (Server $server, Frame $frame) {
echo "received message: {$frame->data}\n";
$server->push($frame->fd, "Hello, {$frame->data}");
});
$server->on("close", function ($ser, $fd) {
echo "connection close: {$fd}\n";
});
$server->start();
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
Chạy máy chủ WebSocket
Trong terminal, chạy lệnh sau để khởi động máy chủ WebSocket:
php websocket_server.php
Bạn sẽ thấy đầu ra sau:
Swoole WebSocket server is started at ws://0.0.0.0:9502
Kết nối máy chủ WebSocket
Có thể sử dụng công cụ WebSocket client trong trình duyệt hoặc các công cụ WebSocket client khác (như wscat
) để kết nối với máy chủ WebSocket.
Sử dụng wscat
kết nối
Cài đặt
wscat
:bashnpm install -g wscat
1Kết nối với máy chủ WebSocket:
bashwscat -c ws://localhost:9502
1Gửi tin nhắn:
bash> Hello ServBay
1
Bạn sẽ thấy máy chủ trả về tin nhắn:
< Hello, Hello ServBay
Qua các bước trên, bạn đã thành công tạo và chạy một dự án Swoole, và sử dụng các chức năng của Swoole để xử lý yêu cầu HTTP và kết nối WebSocket. Hiệu suất cao và các chức năng phong phú của Swoole khiến nó trở thành lựa chọn lý tưởng để xây dựng các ứng dụng xử lý đồng thời cao.