使用 Supervisor 运行 棘轮网络套接字并在 laravel 中排队
Using Supervisor to run ratchet websockets and queue in laravel
我已经对 运行 某个端口上的 websockets 发出了 artisan 命令,如下所示
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();
}
}
我可以 运行 那些套接字很容易 运行 宁一个 artisan 命令如下
php artisan run:socket 8181
php artisan run :socket 8182
我需要将它部署在生产服务器上,其中数千台设备连接到该网络套接字上。 我试过 supervisor 来守护进程,但没有成功
我的配置文件如下所示
[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
有什么我遗漏的吗?
I managed to fix it by making seperate process on supervisor
- 管理队列
在/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
现在更新 Supervisor: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
现在更新 Supervisor:sudo supervisorctl reread。并开始使用这些更改:sudo supervisorctl update。
我已经对 运行 某个端口上的 websockets 发出了 artisan 命令,如下所示
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();
}
}
我可以 运行 那些套接字很容易 运行 宁一个 artisan 命令如下
php artisan run:socket 8181
php artisan run :socket 8182
我需要将它部署在生产服务器上,其中数千台设备连接到该网络套接字上。 我试过 supervisor 来守护进程,但没有成功
我的配置文件如下所示
[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
有什么我遗漏的吗?
I managed to fix it by making seperate process on supervisor
- 管理队列
在/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
现在更新 Supervisor: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
现在更新 Supervisor:sudo supervisorctl reread。并开始使用这些更改:sudo supervisorctl update。