pm2如何启动workerman的gateway?
情况是这样的,我这边服务器是windows系统的,想要使用gateway创建websocket连接,然后我照着网上的教程,写了一个command,然后也另外写了一个bat文件启动workerman,然后我发现bat文件启动workerman后会出现一个cmd命令行,我不想要这个cmd命令行一直开着,搞不好会有人挂掉了。
所以我想用PM2 来对进程保持,然后我用pm2,后就一直启动失败
<?php
namespace App\Console\Commands;
use App\Http\Controllers\IndexController;
use GatewayWorker\BusinessWorker;
use GatewayWorker\Gateway;
use GatewayWorker\Register;
use Illuminate\Console\Command;
use Workerman\Worker;
class WorkermanCommand extends Command
{
protected $description = 'Start a Workerman server.';
protected $signature = 'workerman
{action : action}
{--start=all : start}
{--d : daemon mode}';
public function handle() {
global $argv;
$action = $this->argument('action');
/**
* 针对 Windows 一次执行,无法注册多个协议的特殊处理
*/
if ($action === 'single') {
$start = $this->option('start');
if ($start === 'register') {
$this->startRegister();
} elseif ($start === 'gateway') {
$this->startGateWay();
} elseif ($start === 'worker') {
$this->startBusinessWorker();
}
Worker::runAll();
return;
}
/**
* argv[0] 默认是,当前文件,可以不修改
*/
//$argv[0] = 'wk';
$argv[1] = $action;
// 控制是否进入 daemon 模式
$argv[2] = $this->option('d') ? '-d' : '';
$this->start();
}
private function start()
{
$this->startGateWay();
$this->startBusinessWorker();
$this->startRegister();
Worker::runAll();
}
private function startBusinessWorker()
{
$worker = new BusinessWorker();
$worker->name = 'BusinessWorker';
$worker->count = 3;
$worker->registerAddress = '127.0.0.1:1236';
$worker->eventHandler = IndexController::class;
}
private function startGateWay()
{
$gateway = new Gateway("websocket://0.0.0.0:2346");
$gateway->name = 'Gateway';
$gateway->count = 2;
$gateway->lanIp = '127.0.0.1';
$gateway->startPort = 2300;
$gateway->pingInterval = 300;
$gateway->pingNotResponseLimit = 0;
$gateway->pingData = '{"type":"ping"}';
$gateway->registerAddress = '127.0.0.1:1236';
}
private function startRegister()
{
new Register('text://0.0.0.0:1236');
}
}
然后bat文件是:start_for_win.bat
start /b php artisan workerman single --start=register
start /b php artisan workerman single --start=gateway
start /b php artisan workerman single --start=worker
然后我用pm2启动bat文件pm2 start start_for_win.bat
结果就是error了
id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │ ├────┼───────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤ │ 0 │ worker │ default │ N/A │ cluster │ 1732 │ 0 │ 1 │ stopped │ 0% │ 0b │ test │ disabled
就问下大家这个pm2 如何启动workerman?
我在windows试了下,这样是可行的,相当于用pm2维护3个进程,创建一个yml文件