PHP TrueAsync 正式支持 FPM 模式运行

AI 概述
TrueAsync 是创新的 PHP 异步扩展,借协程实现异步编程。其 GitHub 仓库提供完整 Docker 配置方案,与 PHP-FPM、Nginx 结合,一键部署,是针对异步场景优化的全栈方案。它把阻塞式 I/O 转为非阻塞式,可并发执行多项任务,性能提升明显。项目亮点包括 Docker 一体化、Nginx 优化、Supervisor 管理、内置测试等。还提供了快速上手方式、测试 demo、首个代码示例、PHP-FPM 及 PHP 配置说明和查看日志的方法。
目录
文章目录隐藏
  1. 让 PHP 异步编程更简单
  2. 核心亮点
  3. 快速上手
  4. 测试
  5. 第一个 TrueAsync 代码示例
  6. 配置
  7. 日志

PHP TrueAsync 正式支持 FPM 模式运行

让 PHP 异步编程更简单

TrueAsync 是一个创新的 PHP 异步扩展,它允许开发者使用协程(coroutines)轻松实现异步编程。这个 GitHub 仓库提供了一个完整的 Docker 配置方案,将 TrueAsync PHP 与 PHP-FPM 和 Nginx 完美结合,让你快速搭建一个支持异步处理的 Web 环境。

这个项目不是简单的 PHP 镜像打包,而是针对异步场景优化的全栈解决方案。它使用 Docker Compose 一键部署,内置了 Nginx 作为反向代理、PHP-FPM 作为进程管理器,还预置了多个测试示例。

核心亮点

TrueAsync 的魅力在于它将 PHP 的阻塞式 I/O 转化为非阻塞式,让网络请求、文件操作甚至 Web 抓取都能并发执行。原本一个 HTTP 请求需要等待数据库查询完成,现在可以通过 spawn 和 await 轻松并行多个任务,性能提升数倍!

  • Docker 一体化:无需手动安装扩展,镜像已内置 TrueAsync 和必要依赖。
  • Nginx 优化:默认超时设置为 300 秒,完美适应异步长任务。
  • Supervisor 管理:自动监控进程,确保服务稳定运行。
  • 内置测试:从 phpinfo 到 Web 抓取 demo,一应俱全,便于验证。

相比传统 LAMP 栈,这个配置更轻量、更现代,尤其适合微服务或 API 后端开发。

快速上手

仓库提供了两种启动方式,推荐 Docker Compose ——它简单且可扩展。假设你已在本地安装 Docker 和 Docker Compose:

  1. 克隆仓库并准备应用目录
    git clone https://github.com/true-async/fpm.git
    cd fpm
    mkdir -p app
    echo '<?php phpinfo(); ?>' > app/index.php  # 创建一个简单测试页
    
  2. 启动服务
    docker-compose up --build
    

构建过程只需几分钟,完成后访问 http://localhost:8080,你会看到一个欢迎页,展示 TrueAsync 的基本信息。如果用纯 Docker:

docker build -t trueasync-fpm .
docker run -d -p 8080:80 --name trueasync-fpm trueasync-fpm

浏览器打开 http://localhost:8080,一切就绪!

测试

仓库预置了几个 demo 文件,值得一试:

  • /phpinfo.php:查看 PHP 配置和 TrueAsync 扩展(用 curl http://localhost:8080/phpinfo.php 命令行测试)。
  • /async-test.php:基础异步任务验证。
  • /async-parallel.php:并行执行多个任务,观察速度提升。
  • /async-sleep.php:模拟延迟,演示 delay 函数。
  • /async-scraper.php:实际 Web 抓取示例,异步拉取多个页面。

这些测试不只验证功能,还能激发你的灵感。比如,在生产中,你可以用它构建一个高吞吐量的爬虫服务。

第一个 TrueAsync 代码示例

在 app/my-async-test.php 中写入:

<?php
usefunctionAsync\spawn;
usefunctionAsync\await;
usefunctionAsync\awaitAll;
usefunctionAsync\delay;

echo"Starting async operations...\n";

// Example 1: Simple spawn and await
$coroutine = spawn(function() {
    delay(1000); // 1 second
    return"Task completed!";
});

$result = await($coroutine);
echo"$result\n";

// Example 2: Parallel execution
$coroutines = [
    spawn(fn() => delay(1000) ?? "Task 1"),
    spawn(fn() => delay(1000) ?? "Task 2"),
    spawn(fn() => delay(1000) ?? "Task 3"),
];

[$results, $exceptions] = awaitAll($coroutines);
print_r($results);

echo"All done!\n";

运行 http://localhost:8080/my-async-test.php,你会看到任务几乎同时完成,而不是串行等待。这样的模式在电商推荐系统或实时数据聚合中超级实用!

配置

PHP-FPM 配置

主进程参数 www.conf

pm = dynamic
pm.max_children = 50        # Maximum processes
pm.start_servers = 5        # Starting number
pm.min_spare_servers = 5    # Minimum idle processes
pm.max_spare_servers = 35   # Maximum idle processes

PHP 配置

在 php.ini 中添加您的自定义设置:

max_execution_time = 300
memory_limit = 256M
upload_max_filesize = 50M
post_max_size = 50M

日志

查看日志

# All logs
docker-compose logs -f

# PHP-FPM only
docker exec -it trueasync-fpm tail -f /var/log/php-fpm/error.log

# Nginx only
docker exec -it trueasync-fpm tail -f /var/log/nginx/error.log

以上关于PHP TrueAsync 正式支持 FPM 模式运行的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。

「点点赞赏,手留余香」

1

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » PHP TrueAsync 正式支持 FPM 模式运行

发表回复