news 2026/4/16 15:24:25

Yii2-Swoole 快速入门

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Yii2-Swoole 快速入门

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:

<?php

return [

'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 示例:

<?php

return [

'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

连接超时?

增加 poolMaxActive 和 poolWaitTimeout 参数

静态文件 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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 12:16:22

计算机Java毕设实战-基于springboot的养宠物指南服务平台系统的设计与实现基于Java SpringBoot的宠物社区互动平台的设计与【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/15 15:35:42

Java毕设选题推荐:基于SpringBoot的演唱会售票系统设计与实现基于springboot的演唱会购票系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/15 17:56:25

零极点对消:原理、作用与风险

这是一个自动控制原理中的核心概念。我们来详细解释一下零极点对消的原理、作用以及需要注意的关键点。一、原理从数学本质上讲&#xff0c;零极点对消就是在系统传递函数的分子和分母中&#xff0c;消除具有相同数值的零点和极点。传递函数&#xff1a;线性时不变系统通常用传…

作者头像 李华
网站建设 2026/4/16 0:29:12

计算机Java毕设实战-基于springboot6+vue的校园智能物流包裹领取寄送管理系统的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/15 12:02:09

22、oracle导入数据,sys_user表数据错误

项目场景&#xff1a; oracle导入数据&#xff0c;sys_user表数据错误问题描述原因分析&#xff1a; 熊小二 使用oracle客户端工具&#xff0c;导入数据&#xff0c;导入成功之后&#xff0c;发现有几张表的数据错误&#xff0c;当时也纳闷&#xff0c;为什么界面的菜单显示不对…

作者头像 李华
网站建设 2026/4/16 14:05:09

达梦数据库备份还原实战心得:守护数据安全的核心密码​

在国产数据库技术课程的系统深耕中&#xff0c;达梦 DM8 的备份还原模块是运维核心 “生命线”。作为政务、金融、能源等关键领域的主流国产选型&#xff0c;其机制需承载数据安全底层逻辑与 “724 小时业务不中断” 的严苛要求。经过数十次高仿真故障演练&#xff08;误删表、…

作者头像 李华