在 laravel 中使用 Supervisor 运行棘轮 websockets 和队列

Posted

技术标签:

【中文标题】在 laravel 中使用 Supervisor 运行棘轮 websockets 和队列【英文标题】:Using Supervisor to run ratchet websockets and queue in laravel 【发布时间】:2017-03-30 00:32:00 【问题描述】:

我已经制作了一个工匠命令来在下面的某个端口上运行 websockets

class webSockets extends Command

    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'run:socket port?';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Run websockets for specified port';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct(RedisInterface $redis)
    
        $this->redis=$redis;
        parent::__construct();
    

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    
        //
       $port = $this->argument('port');
       if($port=='8182') 
            $server = ioserver::factory(
                         new SocketController($this->redis),$port
                    );
       
       else if($port=='8181')
            $server = IoServer::factory(
                         new Socket1Controller($this->redis),$port
                    );
       



       $server->run();
    

我可以轻松运行这些套接字,运行如下所示的工匠命令

php artisan run:socket 8181
php artisan run :socket 8182

我需要将它部署在生产服务器上,该服务器上连接了数千个设备。 我尝试让主管守护进程,但没有成功

我的 conf 文件如下所示

[program:ratchet]
command                 = php /var/www/v3 artisan run:socket 8181;php /var/www/v3 artisan run:socket 8182
process_name            = Ratchet
numprocs                = 1
autostart               = true
autorestart             = true
stdout_logfile          = ./logs/info.log
stderr_logfile          = ./logs/error.log

我发现 8181 和 8182 端口都是空闲的,没有收到任何消息。

当我尝试sudo service supervisorctl 时,我看到所有进程的正常运行时间为 0:00:00 和不同的 pids

laravel_queue                    RUNNING   pid 62246, uptime 0:00:00
ratchet:Ratchet                  RUNNING   pid 62245, uptime 0:00:00
supervisor> status
laravel_queue                    RUNNING   pid 62305, uptime 0:00:00
ratchet:Ratchet                  RUNNING   pid 62304, uptime 0:00:00
supervisor> status
laravel_queue                    RUNNING   pid 62419, uptime 0:00:00
ratchet:Ratchet                  RUNNING   pid 62418, uptime 0:00:00
supervisor> status
laravel_queue                    RUNNING   pid 62553, uptime 0:00:00
ratchet:Ratchet                  RUNNING   pid 62552, uptime 0:00:00
supervisor> status
laravel_queue                    RUNNING   pid 62689, uptime 0:00:00
ratchet:Ratchet                  RUNNING   pid 62688, uptime 0:00:00
supervisor> status
laravel_queue                    RUNNING   pid 62819, uptime 0:00:00
ratchet:Ratchet                  RUNNING   pid 62818, uptime 0:00:00
supervisor> status

有什么我错过的吗?

【问题讨论】:

【参考方案1】:

我设法通过在主管上进行单独的处理来解决它

    管理队列

在 /etc/supervisord/conf.d/ 创建 laravel_queue.conf:

[program:laravel_queue]
command= php artisan queue:listen redis --timeout=7200
directory=/var/www/gpsv3
stderr_logfile=/var/www/gpsv3/storage/logs/laraqueue.err.log
stdout_logfile=/var/www/gpsv3/storage/logs/laraqueue.out.log
redirect_stderr=true

给它执行权限:chmod +x laravel_queue.conf

现在更新主管:sudo supervisorctl reread。并开始使用这些更改:sudo supervisorctl update。

    套接字监听器

在/etc/supervisord/conf.d/创建socket.conf:

[program:socket]
command= php artisan run:socket 8182
directory=/var/www/gpsv3
stderr_logfile=/var/www/gpsv3/storage/logs/socket.err.log
stdout_logfile=/var/www/gpsv3/storage/logs/socket.out.log
redirect_stderr=true

给它执行权限:chmod +x socket.conf

现在更新主管:sudo supervisorctl reread。并开始使用这些更改:sudo supervisorctl update。

【讨论】:

以上是关于在 laravel 中使用 Supervisor 运行棘轮 websockets 和队列的主要内容,如果未能解决你的问题,请参考以下文章

使用 Supervisor 配置 Laravel 运行队列处理器

使用 Supervisor 配置 Laravel 运行队列处理器

使用 Supervisor 配置 Laravel 运行队列处理器

使用 Supervisor 运行多个 Laravel 队列工作者

使用Supervisor来管理你的Laravel队列

Supervisor管理Laravel队列进程报错