天天看點

thinkphp使用 think-swoole task

是參考這位大佬的,大家可以去看看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

輸出:

thinkphp使用 think-swoole task

建立兩個監聽事件

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 ;
    }
}
           

跑起來的樣子

thinkphp使用 think-swoole task