轻量级微PHP框架:Framework X

轻量级微PHP框架:Framework X插图

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!”。

Localhost server setup

除了纯文本,您还可以返回 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 是一个提供 EventLoopStreamPromiseAsync 和 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 组件处理的是异步操作,页面会立即加载,日志就是证明。

Async operations log

与传统 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。无论是构建简单的应用程序,还是复杂的高并发或实时应用程序,它都是一个完美的框架。

评论留言