PHP 已经取得了长足的进步,并在新功能、语法和速度方面不断改进。生态系统也在不断扩大,许多开发人员创建了框架来简化其他开发人员的生活。既有像 Laravel 和 Symfony 这样流行的全功能框架,也有像 Framework X 这样轻量级的微框架。
它是 PHP 的轻量级微框架,采用事件驱动、无阻塞架构,类似于 Node.js,非常适合聊天应用或实时通知等高并发和实时应用。
在本文中,我们将探讨什么是 Framework X 以及它与传统 PHP 框架的区别。
准备工作
首先,确保在电脑上安装了 PHP 和Composer。安装完成后,您可以使用此命令将 Framework X 添加到您的项目中:
composer require clue/framework-x
Framework X 不需要复杂的设置。您只需要一个 public/index.php 文件。下面是一个在主页上显示 “Hello World!”
<?php require dirname(__DIR__) . '/vendor/autoload.php'; $app = new FrameworkX\App(); $app->get('/', fn () => \React\Http\Message\Response::plaintext("Hello world!\n")); $app->run();
要运行应用程序,请键入:
php public/index.php
该命令使用 ReactPHP Socket 组件支持的 PHP 内置服务器启动本地服务器。无需 Nginx 或 Apache。服务器将在http://127.0.0.1:8080
上运行,并显示 “Hello World!”。
除了纯文本,您还可以返回 JSON 数据。例如:
<?php require dirname(__DIR__) . '/vendor/autoload.php'; $users = [['name' => 'Jon Doe'], ['name' => 'Jane Doe']]; $app = new FrameworkX\App(); $app->get('/', fn () => \React\Http\Message\Response::json($users)); $app->run();
异步操作
PHP 操作通常是阻塞和同步的,这意味着每个任务必须在下一个任务开始之前完成。Framework X 基于 ReactPHP 库构建。
ReactPHP 是一个提供 EventLoop、Stream、Promise、Async 和 HTTP 等组件的库,这些组件可实现异步操作。因此,任务可以并发运行,无需等待其他任务完成。这非常适合同时处理多个连接、HTTP 请求或 I/O 操作。
在本例中,我们更新了 index.php,以获取 API。我们不使用 curl_*
函数,而是使用 HTTP 组件 来进行异步请求。
$app = new FrameworkX\App(); $app->get('/', function () { echo "Start\n"; (new \React\Http\Browser()) ->get('https://www.hongkiat.com/blog/wp-json/wp/v2/posts') ->then(function () { echo "End (API)\n"; }); echo "End\n"; return \React\Http\Message\Response::plaintext("Hello world!\n"); }); $app->run();
通常,外部 API 请求会阻止页面渲染,直到请求完成。但是,由于 ReactPHP HTTP 组件处理的是异步操作,页面会立即加载,日志就是证明。
与传统 PHP 设置相比,Framework X 能够处理更多并发请求,大大加快了页面加载时间。但它到底有多快?
速度
我在一个基本的、廉价的 DigitalOcean droplet 上测试了 Framework X,它有 1 个 vCPU 和 1GB 内存。它可以毫不费力地处理每秒约 4000 个请求。
Concurrency Level: 50 Time taken for tests: 22.636 seconds Complete requests: 100000 Failed requests: 0 Keep-Alive requests: 100000 Total transferred: 17400000 bytes HTML transferred: 1300000 bytes Requests per second: 4417.69 [#/sec] (mean) Time per request: 11.318 [ms] (mean) Time per request: 0.226 [ms] (mean, across all concurrent requests) Transfer rate: 750.66 [Kbytes/sec] received
即使有额外的工作量,如磁盘读取操作和从 JSON 文件渲染 100 个列表,它每秒仍能处理约 2700 个请求。
Concurrency Level: 50 Time taken for tests: 36.381 seconds Complete requests: 100000 Failed requests: 0 Keep-Alive requests: 100000 Total transferred: 296700000 bytes HTML transferred: 280500000 bytes Requests per second: 2748.72 [#/sec] (mean) Time per request: 18.190 [ms] (mean) Time per request: 0.364 [ms] (mean, across all concurrent requests) Transfer rate: 7964.31 [Kbytes/sec] received
我敢肯定,如果服务器规格更高,速度会更快。
小结
Framework X 是一款功能强大、轻量级的 PHP 微型框架。它以异步方式运行,能够高效处理多个任务,类似于 Node.js。无论是构建简单的应用程序,还是复杂的高并发或实时应用程序,它都是一个完美的框架。
评论留言