Chào các bạn, dạo gần đây cộng đồng PHP dội lên vì swoole extension trong PHP đặc biệt là sau sự kiện laravel/octane ra đời dựa trên Swoole. Vậy PHP swoole là gì? nó có gì mạnh?. Hôm nay mình sẽ giới thiệu với mọi người.
1. PHP Swoole là gì?
PHP Swoole là một framework sử dụng event-driven, bất đồng bộ, non-blocking I/O và coroutine vì thế nên hiệu năng của nó rất cao, gấp rất nhiều lần so với PHP mặc định. PHP Swoole được viết bằng ngôn ngữ C/C++ bởi 韩天峰 (Rango) vào tháng 7 năm 2012 và được cài đặt như một PHP extension.
Sử dụng PHP Swoole các bạn có thể tạo ra các ứng dụng có hiệu suất cao, dễ mở rộng và hỗ trợ TCP, UDP, Unix socket, HTTP, WebSockket mà các bạn không cần phải biết nhiều về lập trình non-blocking I/O và nhân linux.
PHP Swoole được thiết kế dựa trên các nguyên tắc của Erlang, Node.js và Netty nhưng dành cho PHP.
Tuy nhiên, do Swoole hoặc động trên Linux Kernel nên hiện tại nó chỉ hoạt động được trên Linux, OS X or Cygwin, WSL.
Hiện tại, tại thời điểm mình viết bài PHP Swoole đang ở version 4.6.4
.
2. Cách hoạt động của PHP Swoole.
PHP Swoole không giống với mô hình PHP truyền thống, nó chạy ở trên CLI mode trong PHP (giống như node.js nhưng Swoole sử dụng coroutine và không có callback hell giống như node.js).
PHP Swoole sẽ tạo ra các long process để handle các request sử dụng coroutine. Các bạn có thể xem qua 2 hình dưới đây cho dễ hiểu.
3. Sự khác nhau giữa PHP Swoole và PHP-FPM.
Dưới đây là một vài điểm khác của PHP Swoole so với PHP-FPM truyền thống của PHP.
- PHP Swoole hỗ trợ TCP, UDP và UnixSocket.
- PHP Swoole sử dụng Non-blocking I/O với epoll hoặc kqueue.
- PHP Swoole phân chia được các worker process cho từng CPU để sử dụng được tất cả CPU core.
- PHP Swoole hỗ trợ kết nối long-live cho Websocket server hoặc TCP/UDP server.
- PHP Swoole hỗ trợ nhiều giao thức phía server: TCP/UDP/HTTP/HTTP2/WebSocket.
- PHP Swoole tải trước PHP file vào trong memory.
- PHP Swoole có thể sử dụng, quản lí trạng thái bên trong memory với "PHP Swoole Memory Management Modules".
4. Performance benchmark.
Để kiểm chứng được sức mạnh thực sự của PHP Swoole mình sẽ có demo nho nhỏ và benchmark thử xem kết quả như nào giữa PHP Swoole, PHP-FPM, Node.js.
Code
var http = require('http');
http.createServer(function (request, response) {
response.write('[toidicode.com] Hello world!');
response.end();
}).listen(8000);
PHP-FPM
<?php
echo '[toidicode.com] Hello world!';
PHP Swoole
<?php
use Swoole\Http\Server;
use Swoole\Http\Request;
use Swoole\Http\Response;
$server = new Swoole\HTTP\Server("127.0.0.1", 8082);
$server->on("request", function (Request $request, Response $response) {
$response->end("Hello World\n");
});
$server->start();
Kết quả
Và dưới đây là kết quả benchmark mình đo được sử dụng tool wrk
Node.js
PHP-FPM
PHP Swoole
Kết quả này có thể không chính xác hoàn toàn, nhưng mình chắc chắn là tại thời điểm hiện tại Swoole đang cho kết quả nhanh nhất so với PHP-FPM và Node.js
5. Lời kết.
Swoole còn rất nhiều những điều thú vị khác mà mình chưa nói ở đây, các bạn cần có thể tìm hiểu thêm ở trang trủ của swoole.
Đăng ký nhận tin.
Chúng tôi chỉ gửi tối đa 2 lần trên 1 tháng. Tuyên bố không spam mail!
0 Comments