Think-Swoole: 全面协程化你的 ThinkPHP 应用

ThinkPHP 是一款经典的国产开源 PHP 开发框架。ThinkPHP 诞生于 2006 年,距今已经有 17 年历史。ThinkPHP 在国内的应用非常广泛,很多知名企业使用了 ThinkPHP 来构建 Web 项目。

早期版本的 ThinkPHP 主要是运行在 PHP-FPM 模式下。为了解决长连接、高并发、阻塞 IO 的问题,ThinkPHP 官方提供了 Think-Swoole 组件,底层全面适配了 Swoole 协程,使得 ThinkPHP 应用可以一键协程化。

GitHub 地址

创建 ThinkPHP 项目

composer create-project topthink/think tp

使用 composer 命令可以快速创建一个 ThinkPHP 新项目。已有项目可跳过此步骤。

引入 Think-Swoole 组件

composer require topthink/think-swoole

启动 HTTP 服务

直接在命令行下启动 HTTP 服务端。

php think swoole

启动完成后,默认会在 0.0.0.0:80 启动一个 HTTP Server,可以直接访问当前的应用。相关配置参数可以在 config/swoole.php 里面配置(具体参考配置文件内容)。

若本机已安装了 Nginx,可能 80 已被占用,可修改 config/swoole.php 设置为其他的端口

启动后通过 http://127.0.0.1:9580/ 访问程序

热更新

由于 Swoole 服务运行过程中 PHP 文件是常驻内存运行的,这样可以避免重复读取磁盘、重复解释编译,以便达到最高性能。所以更改业务代码后必须手动reload 或者 restart 才能生效。

Think-Swoole 提供了热更新功能,在检测到相关目录的文件有更新后会自动 reload,从而不需要手动进行 reload 操作,方便开发调试。

如果你的应用开启了调试模式,默认是开启热更新的。原则上,在部署模式下不建议开启文件监控,一方面有性能损耗,另外一方面对文件所做的任何修改都需要确认无误才能进行更新部署。

热更新的默认配置如下:

'hot_update' => [
    'enable' => env('APP_DEBUG', false),
    'name' => ['*.php'],
    'include' => [app_path()],
    'exclude' => [],
],

当我们在应用的根目录下定义一个特殊的 .env 环境变量文件,里面设置了 APP_DEBUG=true 会默认开启热更新,你也可以直接把 enable 设置为true

连接池

Think-Swoole 实现了数据库连接池功能,包括 MySQLRedis 等。

使用连接池要先开启 Swoole 一键协程,需要配置如下参数:

'coroutine' => [
    'enable' => true,
    'flags' => SWOOLE_HOOK_ALL,
],

连接池配置参数如下:

'pool' =>[
    'db' => [
        'enable' => true,
        'max_active' => 3,
        'max_wait_time' => 5,
    ],
    'cache' => [
        'enable' => true,
        'max_active' => 3,
        'max_wait_time' => 5,
    ],
],

参数说明:

  • enable:是否启用连接池
  • max_active:最大连接数,超过将不再新建连接
  • max_wait_time:超时时间,单位为秒
max_activemax_wait_time 需要根据自身业务和环境进行适当调整,最大化提高系统负载

Swoole
PHP的协程框架
avatar
韩天峰
Swoole 开源项目创始人

Swoole 开源项目创始人

7.8k 声望
11.1k 粉丝
0 条评论
推荐阅读
程序猿必读-防范CSRF跨站请求伪造
CSRF(Cross-site request forgery,中文为跨站请求伪造)是一种利用网站可信用户的权限去执行未授权的命令的一种恶意攻击。通过伪装可信用户的请求来利用信任该用户的网站,这种攻击方式虽然不是很流行,但是却...

mylxsw22阅读 16k评论 12

php实现只需要一个QQ号就可以获得用户信息
{代码...} DEMO:[链接]此处输入你的QQ号

TANKING27阅读 7.3k评论 5

初学后端,如何做好表结构设计?
这篇文章介绍了设计数据库表结构应该考虑的4个方面,还有优雅设计的6个原则,举了一个例子分享了我的设计思路,为了提高性能我们也要从多方面考虑缓存问题。

王中阳Go4阅读 1.7k评论 2

封面图
一分钟搞明白!快速掌握 Go WebAssembly
最近因为各种奇怪的原因,更多的接触到了 WebAssembly。虽然之前很多博客也翻过写过各种文章,但总感觉欠些味道。于是今天梳理了一版,和大家一起展开学习。

煎鱼4阅读 2.1k

面试官:请说一下如何优化结构体的性能?
使用内存对齐机制优化结构体性能,妙啊!前言之前分享过2篇结构体文章:10秒改struct性能直接提升15%,产品姐姐都夸我好棒 和 Go语言空结构体这3种妙用,你知道吗? 得到了大家的好评。这篇继续分享进阶内容:结...

王中阳Go4阅读 3.7k评论 2

封面图
Laravel入门及实践,快速上手ThinkSNS+二次开发
【摘要】自从ThinkSNS+不使用ThinkPHP框架而使用Laravel框架之后,很多人都说技术门槛抬高了,其实你与TS+的距离仅仅只是学习一个新框架而已,所以,我们今天来说说Laravel的入门。

ThinkSNS1阅读 2.4k

我让chatGPT用PHP写一个MVC框架,不仅写出来,还能跑!
没想到写出来的框架确实挺简单的,但是又没觉得哪里不对,于是我尝试把这个框架放到服务器试试能不能跑起来,最后还真的可以跑起来,为了让大家能够看到这个框架的演示,我直接爬一个热搜,然后便于展示数据。

TANKING1阅读 1.7k

封面图
avatar
韩天峰
Swoole 开源项目创始人

Swoole 开源项目创始人

7.8k 声望
11.1k 粉丝
宣传栏