news 2026/5/15 4:13:54

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/5/12 7:20:50

# 使用 Flutter 构建跨平台应用:入门与实战

## 一、什么是 Flutter&#xff1f;**Flutter** 是由 Google 开发的开源 UI 软件开发工具包&#xff0c;用于为移动、Web、桌面和嵌入式设备构建高性能、高保真的应用程序。它使用 **Dart** 编程语言&#xff0c;并允许开发者通过一套代码库同时为 Android 和 iOS 创建原生级体…

作者头像 李华
网站建设 2026/5/12 8:13:24

Java计算机毕设之基于springboot的养宠物指南服务平台系统的设计与实现宠物医疗、饲养、训练(完整前后端代码+说明文档+LW,调试定制等)

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

作者头像 李华
网站建设 2026/5/10 17:01:13

21、内网安装软件

项目场景&#xff1a; 熊小二 需要在内网安装软件问题描述原因分析&#xff1a; 解决方案&#xff1a; 在内网安装软件&#xff0c;一定要注意以下事项 1、准备移动硬盘&#xff0c;U盘 2、提前下载软件&#xff08;32位&#xff0c;64位软件&#xff09; 3、提前准备安装教程 …

作者头像 李华
网站建设 2026/5/10 1:07:46

达梦数据库操作全指南

达梦数据库删除操作指南 达梦数据库的删除操作涉及表、数据、用户或数据库本身。以下是不同场景下的操作方法: 删除表数据 使用 DELETE 语句删除表中符合条件的数据行: DELETE FROM 表名 WHERE 条件;若需清空整张表数据但保留表结构,可使用 TRUNCATE 提高性能: TRUNCA…

作者头像 李华
网站建设 2026/5/15 9:01:05

[G32R] 使用 vscode+cmake 开发 G32R501

概述 目前极海官方提供的 IDE 开发环境有 Keil/IAR/Eclipse。都能很好的完成开发&#xff0c;但是 VS Code 配合 CMake 工具是更加“现代”的C/C开发环境&#xff0c;本文提供了在 VS Code 环境下的开发经验&#xff0c;以供参考。准备工作 必需的软件有&#xff1a;cmake: 官网…

作者头像 李华
网站建设 2026/5/9 23:43:18

实验室设备管理系统vue Thinkphp和Laravel

目录具体实现截图项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理具体实现截图 本系统&#xff08;程序源码数据库调试部署讲解&#xff09;带文档1万字以上 同行可拿货,招校园代理 实验室设备管理系统vue Thinkphp和Laravel 项目开发技术介…

作者头像 李华