Skip to content

About

Workerman extend for ThinkPHP

Resources

Stars

201 stars

Watchers

11 watching

Forks

Latest commit

 

History

124 Commits

Folders and files

Repository files navigation

ThinkPHP Workerman 扩展

交流群:981069000 点击加群

安装

composer require topthink/think-worker

说明

由于windows下无法在一个文件里启动多个worker,所以本扩展不支持windows平台

使用方法

HttpServer

在命令行启动服务端

php think worker

然后就可以通过浏览器直接访问当前应用

http://localhost:8080

如果需要使用守护进程方式运行,建议使用supervisor来管理进程

访问静态文件

建议使用nginx来支持静态文件访问,也可使用路由输出文件内容,下面是示例,可参照修改

  1. 添加静态文件路由:
Route::get('static/:path', function (string $path) {
    $filename = public_path() . $path;
    return new \think\worker\response\File($filename);
})->pattern(['path' => '.*\.\w+$']);
  1. 访问路由 http://localhost/static/文件路径

队列支持

使用方法见 think-queue

以下配置代替think-queue里的最后一步:监听任务并执行,无需另外起进程执行队列

return [
    // ...
    'queue'      => [
        'enable'  => true,
        //键名是队列名称
        'workers' => [
            //下面参数是不设置时的默认配置
            'default'            => [
                'delay'      => 0,
                'sleep'      => 3,
                'tries'      => 0,
                'timeout'    => 60,
                'worker_num' => 1,
            ],
            //使用@符号后面可指定队列使用驱动
            'default@connection' => [
                //此处可不设置任何参数,使用上面的默认配置
            ],
        ],
    ],
    // ...
];

websocket

使用路由调度的方式,可以让不同路径的websocket服务响应不同的事件

配置

worker.websocket = true 时开启

路由定义

Route::get('path1','controller/action1');
Route::get('path2','controller/action2');

控制器

use \think\worker\Websocket;
use \think\worker\websocket\Frame;

class Controller {

    public function action1(){
    
        return (new \think\worker\response\Websocket())
            ->onOpen(...)
            ->onMessage(function(Websocket $websocket, Frame $frame){ 
                ...
            })
            ->onClose(...);
    }
    
    public function action2(){
    
        return (new \think\worker\response\Websocket())
            ->onOpen(...)
            ->onMessage(function(Websocket $websocket, Frame $frame){
               ...
            })
            ->onClose(...);
    }
}

自定义worker

监听worker.init事件 注入Manager对象,调用addWorker方法添加

use think\worker\Manager;
use \think\worker\Worker;

//...

public function handle(Manager $manager){
   $worker = $manager->addWorker(function(Worker $worker){
        //..其他回调或处理
        //动态添加监听可参考 https://www.workerman.net/doc/workerman/worker/listen.html
    });
}

//...

About

Workerman extend for ThinkPHP

Resources

Stars

201 stars

Watchers

11 watching

Forks

Releases

Packages

Used by

Contributors

Languages