💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] # 前言 该文章针对的是thinkphp 6.0,适合对tp6有一定了解的。 同时 think-swoole 是基于swoole的,要了解这个扩展如何使用,首先需要对swoole有一定的了解,这也是本文阅读的前提。 Swoole:[https://wiki.swoole.com/wiki/page/1.html](https://wiki.swoole.com/wiki/page/1.html) # 开始前准备 在使用这个扩展前,我们先安装ThinkPHP 6.0,具体的安装方式可以看这里:[https://www.kancloud.cn/manual/thinkphp6\_0/1037481](https://www.kancloud.cn/manual/thinkphp6_0/1037481) 根据上面的安装文档,我们创建2个TP6项目,分别是tp1,tp2,至于为什么要安装2个后面会讲到。 ## 约定 * 下面提到的任何命令,如果没有特别说明,都是在命令控制台上执行的 ## 具体用到的命令 ``` composer create-project topthink/think tp1 composer create-project topthink/think tp2 ``` # 安装think-swoole扩展 分别在这2个项目下,执行如下安装命令安装最新版: ``` composer require topthink/think-swoole ``` 如果安装成功,在项目目录下执行 `php think` 可以看到 如下界面所示: ![](https://img.kancloud.cn/de/30/de30ec42f78c8164f0393a6ad2a64743_1168x1602.png) # 运行swoole 分别进入这2个项目,找到这个文件 `config/swoole.php` ,找到这行,修改端口号: ![](https://img.kancloud.cn/a4/09/a409de9b9bb495e79cb2b1a77866ea8d_1166x150.png) tp1项目修改为`8081`,tp2项目修改为`8082`,监听地址都修改为 `0.0.0.0` 修改完后分别在这2项目下运行: ``` php think swoole ``` 启动完成后,默认会在`0.0.0.0:8081`、`0.0.0.0:8082`启动一个HTTP Server,可以直接访问当前的应用。 ![](https://img.kancloud.cn/7e/9c/7e9cd3943302e85ec449c1bdf3fb277f_912x212.png) 当出现这个界面后,我们访问这个这个地址,就能看到tp6默认的控制器输出的内容了 ![](https://img.kancloud.cn/34/62/34622f868189252faa4de15c935036a1_1186x774.png) 看到这里,恭喜大家已经正常跑起来,接下来你要做的是和传统模式一样的开发你的应用,然后上线。 ## 注意事项 * 我 `10.211.55.13` 这个是我虚拟机的IP地址,需要换成你自己的,如果你直接在你本机运行,可以直接访问 `127.0.0.1` 这个IP就可以 # 热更新 前面我们已经了解到了怎么运行think-swoole,接下来讲的是开发过程中一个比较方便的功能,也就“热更新”,不需要重复的在控制台上执行`php think swoole`,导致开发体验糟糕。 同样找到 `config/swoole.php` 配置文件,我们看这里 ![](https://img.kancloud.cn/52/18/52181406361448d118fe78f5777199e9_932x242.png) 当我们在应用的根目录下定义一个特殊的.env环境变量文件,里面设置了 `APP_DEBUG = true` 会默认开启热更新,你也可以直接把 `enable`设置为true。 参数说明: | 参数 | 说明 | | --- | --- | | name | 简单点说就是监控那些类型的文件变动 | | include | 简单点说就是监控那些路径下的文件变动 | | exclude | 排除目录 | > 注意: 关于.env文件的说明请看这里 [https://www.kancloud.cn/manual/thinkphp6\_0/1037484](https://www.kancloud.cn/manual/thinkphp6_0/1037484) 正式生产环境记得关闭 # 连接池 think-swoole 默认有实现 db、cache、rpc-client 的连接池功能,我们日常开发主要用到的也是这几块,这里我也简单的讲讲。 首先,我们知道在最新的swoole版本中,都支持一键协程([https://wiki.swoole.com/wiki/page/993.html](https://wiki.swoole.com/wiki/page/993.html)),比如redis、mysql等等,很方便。连接池是在这个基础上,解决一些问题和对性能的再一次提升。 同样找到 `config/swoole.php` 配置文件,我们看这里 ![](https://img.kancloud.cn/66/c5/66c57507adea3a39dbe4495abd2d2e29_546x168.png) 这里需要设置为true,默认已经打开,flags默认即可。 接着我们配置这里 ![](https://img.kancloud.cn/5c/93/5c93c3a94b9c5f3da44b4cb9563b3e8c_512x504.png) 这一块是对具体连接池的一个配置。其中的 3、5是根据自身业务和环境进行适当调整,最大化提高系统负载。 参数说明: | 参数 | 说明 | | --- | --- | | enable | 开关,不需要设置false | | max_active | 最大连接数,超过将不再新建连接 | | max_wait_time | 超时时间 | # RPC think-swoole 也支持简单的rpc服务,实现了服务端和客户端,这也是为什么一开始说的,为什么创建2个项目的原因,为了测试rpc服务。 ![](https://img.kancloud.cn/60/af/60afb30f2a727092197c487f09a77b7d_460x390.png) 配置文件这段就是和rpc相关的配置了,`sercer` 配置的是服务端相关的,`client` 配置的是客户端相关的,在同一个项目,又可以是服务端,也可以是客户端。 接下来我们来了解下如何使用。 ## 创建服务端接口 我们在项目tp1下 `app/rpc` 目录下创建一个 `MyRpcInterface.php` 文件,代码如下 ``` <?php namespace app\rpc; interface MyRpcInterface { public function demo(); } ``` 接着在同一目录下创建 `MyRpc.php` 文件,代码如下: ``` <?php namespace app\rpc; class MyRpc implements MyRpcInterface { public function demo(){ return 'myrpc'; } } ``` 现在tp1的项目代码结果是这样的 ![](https://img.kancloud.cn/5c/52/5c52bb616ce17869f6927dc4f504a0d5_546x568.png) 接着我们修改配置文件,把这个接口添加到服务端 ![](https://img.kancloud.cn/e4/9e/e49e7ec8b22c65d64b1f56c879b8c565_584x432.png) 然后执行 ``` php think swoole ``` ## 客户端使用 接着我们到tp2项目下修改配置文件 ![](https://img.kancloud.cn/eb/13/eb13b781f673a93ad74c2e7f0df562ee_586x550.png) 其中 `tp1` 是可以随便取的,相当于是rpc服务的一个别名,host和port是tp1项目配置的server信息,这个必须正确,不然无法走通。 接着我们在tp2运行如下命令 ``` php think rpc:interface ``` 看到如下图表示成功 ![](https://img.kancloud.cn/bc/9a/bc9ab7be8f7d8ea8f60bde7ecbc4724c_1008x124.png) 这个时候会在`app`目录下生成一个 `rpc.php`文件,文件内容如下: ![](https://img.kancloud.cn/71/ae/71ae3c5ff880470221093b7ed7744943_664x568.png) > 注意: 如果没有这个文件,或者这个文件内容很少,那可能是那里有问题没有设置正确,需要回头看看上面。同时tp1项目也要启动php think swoole才可以 接着我们来测试下,是不是可以使用正常,我们修改tp2项目下 `app/controller/Index.php` 文件: ![](https://img.kancloud.cn/46/f8/46f80e3a646cd46235f9b86e02518d86_1034x830.png) 然后启动 `php think swoole` 用浏览器访问下,就看到如下界面: ![](https://img.kancloud.cn/2d/9b/2d9b3267c7a44fcbd930e12690e0e043_752x270.png) 是不是很方便?和我们普通的调用没有太大区别,开发体验还是很不错的。 # websocket 由于我很少用到,所以还没去了解,等后续补充。