composer require topthink/think-worker
由于windows下无法在一个文件里启动多个worker,所以本扩展不支持windows平台
在命令行启动服务端
php think worker
然后就可以通过浏览器直接访问当前应用
http://localhost:8080
如果需要使用守护进程方式运行,建议使用supervisor来管理进程
建议使用nginx来支持静态文件访问,也可使用路由输出文件内容,下面是示例,可参照修改
- 添加静态文件路由:
Route::get('static/:path', function (string $path) {
$filename = public_path() . $path;
return new \think\worker\response\File($filename);
})->pattern(['path' => '.*\.\w+$']);
- 访问路由
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服务响应不同的事件
swoole.websocket = true 时开启
Route::get('path1','controller/action1');
Route::get('path2','controller/action2');
use \think\swoole\Websocket;
use \think\swoole\websocket\Event;
use \Swoole\WebSocket\Frame;
class Controller {
public function action1(){
return \think\swoole\helper\websocket()
->onOpen(...)
->onMessage(function(Websocket $websocket, Frame $frame){
...
})
->onClose(...);
}
public function action2(){
return \think\swoole\helper\websocket()
->onOpen(...)
->onMessage(function(Websocket $websocket, Frame $frame){
...
})
->onClose(...);
}
}
监听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
});
}
//...