laravel中如何启动多个workerman服务?

八千年丶

laravel 使用Workerman , 已经开了一个服务以后(php artisan workerman:command start d),再开另一个(php artisan workermanweb:command start d)提示已经运行, Workerman start in DEBUG mode Workerman already running 端口号确定不同 ,怎么处理才好 ?

5530 1 0
1个回答

blogdaren

1、报告 already running 的原因是因为workerman要求不能重复启动已经在运行的同一个启动脚本,这是为了准确的stop 、restart等所需。在laravel中  artisan  脚本就相当于我们常见的 start.php 启动脚本,根据这个原理我们有如下参考做法:cp /path/to/artisan /path/to/artisan2
php artisan xxxx xxxx
php artisan2 xxxx xxxx

2.  参考方案二:php artisan make:command MyCommandclass

MyCommand extend Command
{
    public function start()
    {   
      $this->worker1 = new Worker("tcp://0.0.0.0:8888");
      $this->worker2 = new Worker("http://0.0.0.0:9999");
      //.........

      // 启动多少个进程对外提供服务
      $this->worker1->count = 3;
      $this->worker1->count = 4;

      // 运行worker
      Worker::runAll();
    }   
}

 

  • 八千年丶 2019-01-04

    嗯,两种方式都试过了,第一种 启动的时候 提示启动命令不存在,第2个启动的时候 提示不能在一个文件启动2个 worker, 试了下另外的方式
    Worker::runAll(); 在这个方法中传递参数进去 然后根据传递的参数生成.pid文件。

  • blogdaren 2019-01-04

    @5248: 两种方式工作方式亲自实践了下,都工作OK。

  • ShiOGong 2019-04-29

    @614 我这儿也不行诶 第二种是already running 第一种我觉得不是个方法 忽略了

  • 八千年丶 2019-08-30

    @614:嗯,理论上这两个方法都可以的,但是确实在我这不行,可能是laravel版本的问题吧

  • 八千年丶 2019-08-30

    @5776:我这边稍微改了下,让它启动的时候读取不同的pid文件就可以了

年代过于久远,无法发表回答
🔝