[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,具體的安裝方式可以看這里:[http://www.hmoore.net/manual/thinkphp6\_0/1037481](http://www.hmoore.net/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` 可以看到 如下界面所示:

# 運行swoole
分別進入這2個項目,找到這個文件 `config/swoole.php` ,找到這行,修改端口號:

tp1項目修改為`8081`,tp2項目修改為`8082`,監聽地址都修改為 `0.0.0.0` 修改完后分別在這2項目下運行:
```
php think swoole
```
啟動完成后,默認會在`0.0.0.0:8081`、`0.0.0.0:8082`啟動一個HTTP Server,可以直接訪問當前的應用。

當出現這個界面后,我們訪問這個這個地址,就能看到tp6默認的控制器輸出的內容了

看到這里,恭喜大家已經正常跑起來,接下來你要做的是和傳統模式一樣的開發你的應用,然后上線。
## 注意事項
* 我 `10.211.55.13` 這個是我虛擬機的IP地址,需要換成你自己的,如果你直接在你本機運行,可以直接訪問 `127.0.0.1` 這個IP就可以
# 熱更新
前面我們已經了解到了怎么運行think-swoole,接下來講的是開發過程中一個比較方便的功能,也就“熱更新”,不需要重復的在控制臺上執行`php think swoole`,導致開發體驗糟糕。
同樣找到 `config/swoole.php` 配置文件,我們看這里

當我們在應用的根目錄下定義一個特殊的.env環境變量文件,里面設置了 `APP_DEBUG = true` 會默認開啟熱更新,你也可以直接把 `enable`設置為true。
參數說明:
| 參數 | 說明 |
| --- | --- |
| name | 簡單點說就是監控那些類型的文件變動 |
| include | 簡單點說就是監控那些路徑下的文件變動 |
| exclude | 排除目錄 |
> 注意:
關于.env文件的說明請看這里 [http://www.hmoore.net/manual/thinkphp6\_0/1037484](http://www.hmoore.net/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` 配置文件,我們看這里

這里需要設置為true,默認已經打開,flags默認即可。
接著我們配置這里

這一塊是對具體連接池的一個配置。其中的 3、5是根據自身業務和環境進行適當調整,最大化提高系統負載。
參數說明:
| 參數 | 說明 |
| --- | --- |
| enable | 開關,不需要設置false |
| max_active | 最大連接數,超過將不再新建連接 |
| max_wait_time | 超時時間 |
# RPC
think-swoole 也支持簡單的rpc服務,實現了服務端和客戶端,這也是為什么一開始說的,為什么創建2個項目的原因,為了測試rpc服務。

配置文件這段就是和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的項目代碼結果是這樣的

接著我們修改配置文件,把這個接口添加到服務端

然后執行
```
php think swoole
```
## 客戶端使用
接著我們到tp2項目下修改配置文件

其中 `tp1` 是可以隨便取的,相當于是rpc服務的一個別名,host和port是tp1項目配置的server信息,這個必須正確,不然無法走通。
接著我們在tp2運行如下命令
```
php think rpc:interface
```
看到如下圖表示成功

這個時候會在`app`目錄下生成一個 `rpc.php`文件,文件內容如下:

> 注意:
如果沒有這個文件,或者這個文件內容很少,那可能是那里有問題沒有設置正確,需要回頭看看上面。同時tp1項目也要啟動php think swoole才可以
接著我們來測試下,是不是可以使用正常,我們修改tp2項目下 `app/controller/Index.php` 文件:

然后啟動 `php think swoole` 用瀏覽器訪問下,就看到如下界面:

是不是很方便?和我們普通的調用沒有太大區別,開發體驗還是很不錯的。
# websocket
由于我很少用到,所以還沒去了解,等后續補充。