是參考這位大佬的,大家可以去看看https://www.kancloud.cn/book_xwy/think-swoole3/1720752
安裝thinkphp6
composer create-project topthink/think tpwebsocket
通過composer給項目安裝think-swoole擴充
composer require topthink/think-swoole
使用nginx做代理服務配置如下
server{
listen 80 ;
server_name 域名;
#代理配置
location /{
proxy_set_header X-Original-Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:9501/;
}
}
1.:9501是config/swoole.php中的server[‘port’]
2.配置完成後重新開機nginx即可
3.在項目根目錄下執行php think swoole start
4.通路域名即可看到響應結果.
常用指令:
php think swoole start
php think swoole restart
php think swoole stop
輸出:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL4QTOzUDM1MTMzADOwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
建立兩個監聽事件
php think make:listener SwooleTask
php think make:listener SwooleTaskFinish
在event.php加入如下代碼:
// 事件定義檔案
return [
'bind' => [
],
'listen' => [
'AppInit' => [],
'HttpRun' => [],
'HttpEnd' => [],
'LogLevel' => [],
'LogWrite' => [],
'swoole.task'=>['\app\listener\SwooleTask'],
'swoole.finish'=>['\app\listener\SwooleTaskFinish'],
],
'subscribe' => [
],
];
SwooleTask.php
<?php
declare (strict_types=1);
namespace app\listener;
use Swoole\Server\Task;
class SwooleTask
{
/**
* 事件監聽處理
*
* @return mixed
*/
public function handle(Task $task)
{
var_dump('on task');
var_dump($task->data);//task的data資料即server->task()傳入的資料
$task->finish($task->data);//這裡必須手動執行finish,否則不會觸發onFinish監聽事件
return ;
}
}
SwooleTaskFinish.php
<?php
namespace app\controller;
use app\BaseController;
use Swoole\Server;
class Index extends BaseController
{
public function index(Server $server)
{
$server->task(['test'=>'test value']);
return ;
}
}
跑起來的樣子