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

2023-04-0316:45:14后端程序开发Comments1,697 views字数 1386阅读模式

早期版本的 ThinkPHP 主要是运行在 PHP-FPM 模式下。为了解决长连接、高并发、阻塞 IO 的问题,ThinkPHP 官方提供了 Think-Swoole 组件,底层全面适配了 Swoole 协程,使得 ThinkPHP 应用可以一键协程化。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/32667.html

GitHub 地址

  • ThinkPHP
  • Think-Swoole

创建 ThinkPHP 项目

composer create-project topthink/think tp

使用 composer 命令可以快速创建一个 ThinkPHP 新项目。已有项目可跳过此步骤。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/32667.html

引入 Think-Swoole 组件

composer require topthink/think-swoole

启动 HTTP 服务

直接在命令行下启动 HTTP 服务端。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/32667.html

php think swoole

启动完成后,默认会在 0.0.0.0:80 启动一个 HTTP Server,可以直接访问当前的应用。相关配置参数可以在 config/swoole.php 里面配置(具体参考配置文件内容)。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/32667.html

若本机已安装了 Nginx,可能 80 已被占用,可修改 config/swoole.php 设置为其他的端口文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/32667.html

启动后通过 http://127.0.0.1:9580/ 访问程序文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/32667.html

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

热更新

由于 Swoole 服务运行过程中 PHP 文件是常驻内存运行的,这样可以避免重复读取磁盘、重复解释编译,以便达到最高性能。所以更改业务代码后必须手动reload 或者 restart 才能生效。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/32667.html

Think-Swoole 提供了热更新功能,在检测到相关目录的文件有更新后会自动 reload,从而不需要手动进行 reload 操作,方便开发调试。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/32667.html

如果你的应用开启了调试模式,默认是开启热更新的。原则上,在部署模式下不建议开启文件监控,一方面有性能损耗,另外一方面对文件所做的任何修改都需要确认无误才能进行更新部署。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/32667.html

热更新的默认配置如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/32667.html

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

当我们在应用的根目录下定义一个特殊的 .env 环境变量文件,里面设置了 APP_DEBUG=true 会默认开启热更新,你也可以直接把 enable 设置为true 。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/32667.html

连接池

Think-Swoole 实现了数据库连接池功能,包括 MySQLRedis 等。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/32667.html

使用连接池要先开启 Swoole 一键协程,需要配置如下参数:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/32667.html

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

连接池配置参数如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/32667.html

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

参数说明:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/32667.html

  • enable:是否启用连接池
  • max_active:最大连接数,超过将不再新建连接
  • max_wait_time:超时时间,单位为秒

max_active 和 max_wait_time 需要根据自身业务和环境进行适当调整,最大化提高系统负载文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/32667.html

文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/32667.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/bc/32667.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定