问个workerman的问题?
我用的laravel 5.8
然后我在app/console/commands目录下创建两个文件test1.php,test2.php
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Workerman\Worker;
use Workerman\Lib\Timer;
class test extends Command
{
protected $signature = 'test1 {worker_command} {--mode=}';
protected $worker;
protected $events = [
'onWorkerStart',
'onConnect',
'onMessage',
'onClose',
'onError',
'onBufferFull',
'onBufferDrain',
'onWorkerStop',
'onWorkerReload'
];
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
$worker = new Worker();
$this->worker = $worker;
$worker->onWorkerStart = [$this,'onWorkerStart'];
$this->worker->name = 'test1';
$this->worker->count = 5;
}
public function handle()
{
$this->initWorker();
$this->worker->runAll();
}
protected function initWorker()
{
global $argv;
$argv[0] = "xxxxxx";
$argv[1] = $command = $this->argument('worker_command');
$mode = $this->option('mode');
isset($mode) && $argv[2] = '-' . $mode;
print_r($argv);
}
}
两个差不多文件,然后去我启动
php artisan test1 ,不知道为什么总是把test2 也一起启动了,
就问下这workerman runAll时候如何只启动自己的文件
其实这也可以说是laravel的一个bug,我之前做队列任务的时候,遇到类似的情况。
本质原因就是 laravel 执行
php artisan
会把Command都扫一遍,然后会执行到__construct()
,导致把所有命令任务的__construct()
都跑到了。从此之后,我写Command的初始化操作,都是尽量能不在
__construct()
写就不在这写,基本都放到了handle()
,要是初始化代码比较多,觉得臃肿,我就封装多一个_init()
,然后在handle()
调用他