当前位置: 首页 > news >正文

Yii2-Swoole 快速入门 - dacheng

Yii2-Swoole 快速入门

让你的 Yii2 应用性能提升 10-100 倍!本教程将教你如何在 yii2-app-basic 中快速集成 yii2-swoole。

为什么使用 yii2-swoole?

  • ⚡ 比 PHP-FPM 快 10-100 倍
  • 🔄 数据库和 Redis 连接池自动管理
  • 🚀 协程并发处理请求
  • 💻 代码几乎不需要修改

系统要求

  • PHP >= 8.1
  • Swoole >= 6.0
  • Yii2 >= 2.0

安装 Swoole

pecl install swoole

php.ini 中添加:

extension=swoole.so

验证:

php --ri swoole

快速开始

1. 安装扩展

composer require dacheng-php/yii2-swoole

2. 创建配置文件

创建 config/swoole.php

<?phpreturn ['bootstrap' => [['class' => \Dacheng\Yii2\Swoole\Bootstrap::class,'componentId' => 'swooleHttpServer','memoryLimit' => '2G',],],'components' => ['swooleHttpServer' => ['class' => \Dacheng\Yii2\Swoole\Server\HttpServer::class,'host' => '127.0.0.1','port' => 9501,'documentRoot' => __DIR__ . '/../web','settings' => ['max_coroutine' => 100000,'log_level' => SWOOLE_LOG_WARNING,],'dispatcher' => new \Dacheng\Yii2\Swoole\Server\RequestDispatcher(__DIR__ . '/web.php'),],],
];

3. 修改 Web 配置

编辑 config/web.php,在 return $config; 之前添加:

// 合并 Swoole 配置
$swooleConfig = require __DIR__ . '/swoole.php';
$config = \yii\helpers\ArrayHelper::merge($swooleConfig, $config);

4. 启动服务器

php yii swoole/start

访问 http://127.0.0.1:9501 即可!

停止服务器:

php yii swoole/stop
# 或按 Ctrl+C

进阶功能

数据库连接池

config/swoole.php 中添加:

'db' => ['class' => \Dacheng\Yii2\Swoole\Db\CoroutineDbConnection::class,'dsn' => 'mysql:host=127.0.0.1;dbname=your_database','username' => 'root','password' => '','charset' => 'utf8mb4','poolMaxActive' => 20,'poolWaitTimeout' => 5.0,
],

使用方式与标准 Yii2 完全相同,连接池自动管理。

Redis 连接池

composer require yiisoft/yii2-redis

config/swoole.php 中添加:

'redis' => ['class' => \Dacheng\Yii2\Swoole\Redis\CoroutineRedisConnection::class,'hostname' => '127.0.0.1','port' => 6379,'poolMaxActive' => 20,'poolWaitTimeout' => 5.0,
],'cache' => ['class' => \Dacheng\Yii2\Swoole\Cache\CoroutineRedisCache::class,'redis' => 'redis',
],'session' => ['class' => \Dacheng\Yii2\Swoole\Session\CoroutineSession::class,'redis' => 'redis',
],

异步队列

composer require yiisoft/yii2-queue

配置:

'bootstrap' => [// ...'queue',
],
'components' => ['queue' => ['class' => \Dacheng\Yii2\Swoole\Queue\CoroutineRedisQueue::class,'redis' => 'redis','channel' => 'queue','concurrency' => 10,],
],

创建任务 jobs/EmailJob.php

<?php
namespace app\jobs;class EmailJob extends \yii\base\BaseObject implements \yii\queue\JobInterface
{public $to;public $subject;public function execute($queue){// 发送邮件\Yii::$app->mailer->compose()->setTo($this->to)->setSubject($this->subject)->send();}
}

使用:

Yii::$app->queue->push(new EmailJob(['to' => 'user@example.com','subject' => '测试',
]));

协程 HTTP 客户端

配置:

'httpClient' => ['class' => \Dacheng\Yii2\Swoole\HttpClient\CoroutineClient::class,'transport' => ['class' => \Dacheng\Yii2\Swoole\HttpClient\CoroutineTransport::class,],
],

使用:

// 单个请求
$response = Yii::$app->httpClient->get('https://api.example.com/users')->send();// 批量并发请求
$requests = ['users' => Yii::$app->httpClient->get('https://api.example.com/users'),'posts' => Yii::$app->httpClient->get('https://api.example.com/posts'),
];
$responses = Yii::$app->httpClient->batchSend($requests);

完整配置

config/swoole.php 示例:

<?phpreturn ['bootstrap' => [['class' => \Dacheng\Yii2\Swoole\Bootstrap::class,'componentId' => 'swooleHttpServer',],'queue',],'components' => ['swooleHttpServer' => ['class' => \Dacheng\Yii2\Swoole\Server\HttpServer::class,'host' => '127.0.0.1','port' => 9501,'documentRoot' => __DIR__ . '/../web','dispatcher' => new \Dacheng\Yii2\Swoole\Server\RequestDispatcher(__DIR__ . '/web.php'),],'db' => ['class' => \Dacheng\Yii2\Swoole\Db\CoroutineDbConnection::class,'dsn' => 'mysql:host=127.0.0.1;dbname=myapp','username' => 'root','password' => '','poolMaxActive' => 20,],'redis' => ['class' => \Dacheng\Yii2\Swoole\Redis\CoroutineRedisConnection::class,'hostname' => '127.0.0.1','poolMaxActive' => 20,],'cache' => ['class' => \Dacheng\Yii2\Swoole\Cache\CoroutineRedisCache::class,'redis' => 'redis',],'session' => ['class' => \Dacheng\Yii2\Swoole\Session\CoroutineSession::class,'redis' => 'redis',],'queue' => ['class' => \Dacheng\Yii2\Swoole\Queue\CoroutineRedisQueue::class,'redis' => 'redis',],],
];

常见问题

代码修改后不生效?
重启服务器:Ctrl+C 停止后重新启动(Swoole 常驻内存)

无法启动?

  • 检查 Swoole 是否安装:php --ri swoole
  • 检查端口占用:lsof -i:9501

连接超时?
增加 poolMaxActivepoolWaitTimeout 参数

静态文件 404?
确认 documentRoot 指向正确的 web 目录

生产部署

Systemd 服务

创建 /etc/systemd/system/yii2-app.service

[Unit]
Description=Yii2 Swoole
After=network.target[Service]
Type=simple
User=www-data
WorkingDirectory=/var/www/my-app
ExecStart=/usr/bin/php /var/www/my-app/yii swoole/start
Restart=on-failure[Install]
WantedBy=multi-user.target

启动:

sudo systemctl daemon-reload
sudo systemctl enable yii2-app
sudo systemctl start yii2-app

Nginx 反向代理

server {listen 80;server_name example.com;location / {proxy_pass http://127.0.0.1:9501;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}
}

注意事项

  • ⚠️ 避免使用全局变量(多请求共享)
  • ⚠️ 使用协程安全组件(CoroutineSession、CoroutineUser)
  • ⚠️ 代码修改需要重启服务器

了解更多

  • 项目主页:https://github.com/dacheng-php/yii2-swoole
  • 示例代码:查看 examples/ 目录
  • Swoole 文档:https://wiki.swoole.com/zh-cn/

如果本项目对你有帮助,欢迎 ⭐ Star!

http://www.hskmm.com/?act=detail&tid=39976

相关文章:

  • 2025年氨水换热器源头厂家权威推荐榜单:板式换热器/缠绕管换热器/螺旋板换热器源头厂家精选
  • 软件测试哲学:从单元测试到端到端测试的完整指南
  • 内存泄漏的原因和排查方法详解
  • 2025年松木猫砂厂家权威推荐榜单:无尘矿砂/膨润土猫砂/水晶猫砂源头厂家精选
  • 权威媒体:得帆信息连续两年领跑iPaaS市占率
  • 基于RDS Supabase 服务高效构建轻量级应用,完成任务可赢取淘公仔、加湿器等好礼!
  • 读后感1
  • 18 10.17
  • 17 10.16
  • 20 10.21
  • 19 10.20
  • 分治法运用有感
  • 2025年食品重型货架厂家推荐排行榜,仓储重型货架,冷库重型货架,阁楼式重型货架,密集存储重型货架公司精选
  • redis 8.2.2单机部署
  • 2025年纺织仓库货架厂家推荐排行榜,重型货架,中型货架,阁楼货架,自动化立体仓库货架公司精选
  • 2025年装卸货平台厂家权威推荐榜:固定式装卸平台、移动式登车桥、液压升降平台专业制造商精选
  • Tlias系统实战
  • 2025年定制机械设备货架厂家推荐排行榜,重型机械设备货架,自动化设备货架,车间设备存储货架公司精选指南
  • 算法分析--寻找多数元素
  • 2025年物流货架厂家权威推荐榜:重型货架/阁楼货架/自动化立库货架,专业设计与承重性能深度解析
  • 吴恩达深度学习课程一:神经网络和深度学习 第四周:深层神经网络的关键概念 课后作业和代码实践
  • C#中的 Span、fixed、多维数组
  • 2025年定制钢平台货架厂家推荐排行榜,阁楼式钢平台货架,重型钢平台货架,仓储钢平台货架,定制钢平台货架公司精选
  • 2025年定制多层重型货架厂家推荐排行榜,仓库货架,重型仓储货架,阁楼货架,立体库货架公司精选
  • Launcher 桌面源码笔记二
  • 2025年冷水机厂家权威推荐榜:开放式冷水机/离心式冷水机/工业小型冷水机/水冷螺杆冷水机/风冷螺杆冷水机/螺杆式冷水机专业选购指南
  • 2025年热门的食品级贴体盒厂家推荐及采购指南
  • 2025年耐用的双相钢不锈钢焊管厂家推荐及选购指南
  • 2025年定制物流仓库货架厂家推荐排行榜,重型货架,阁楼货架,自动化立库货架,穿梭式货架公司精选
  • 2025年正规的称重地磅TOP品牌厂家排行榜