workerman命令启动文件存放在crmeb\command\Workerman.php
命令配置
protected function configure()
{
// 指令配置
$this->setName('workerman')
->addArgument('status', Argument::REQUIRED, 'start/stop/reload/status/connections')
->addArgument('server', Argument::OPTIONAL, 'admin/chat/channel')
->addOption('d', null, Option::VALUE_NONE, 'daemon(守护进程)方式启动')
->setDescription('start/stop/restart workerman');
}
命令启动方法
protected function execute(Input $input, Output $output)
{
$server = $this->init($input, $output);
/** @var SystemConfigServices $services */
$services = app()->make(SystemConfigServices::class);
$sslConfig = $services->getSslFilePath();
// $confing['wss_open'] = $sslConfig['wssOpen'] ?? 0;
$confing['wss_open'] = 0;
$confing['wss_local_cert'] = $sslConfig['wssLocalCert'] ?? '';
$confing['wss_local_pk'] = $sslConfig['wssLocalpk'] ?? '';
// 证书最好是申请的证书
if ($confing['wss_open']) {
$context = [
'ssl' => [
// 请使用绝对路径
'local_cert' => realpath('public' . $confing['wss_local_cert']), // 也可以是crt文件
'local_pk' => realpath('public' . $confing['wss_local_pk']),
'verify_peer' => false,
]
];
} else {
$context = [];
}
Worker::$pidFile = app()->getRootPath() . 'runtime/workerman.pid';
if (!$server || $server == 'admin') {
var_dump('admin');
//创建 admin 长连接服务
$this->workerServer = new Worker($this->config['admin']['protocol'] . '://' . $this->config['admin']['ip'] . ':' . $this->config['admin']['port'], $context);
$this->workerServer->count = $this->config['admin']['serverCount'];
if ($confing['wss_open']) {
$this->workerServer->transport = 'ssl';
}
}
if (!$server || $server == 'chat') {
var_dump('chat');
//创建 h5 chat 长连接服务
$this->chatWorkerServer = new Worker($this->config['chat']['protocol'] . '://' . $this->config['chat']['ip'] . ':' . $this->config['chat']['port'], $context);
$this->chatWorkerServer->count = $this->config['chat']['serverCount'];
if ($confing['wss_open']) {
$this->chatWorkerServer->transport = 'ssl';
}
}
if (!$server || $server == 'channel') {
var_dump('channel');
//创建内部通讯服务
$this->channelServer = new Server($this->config['channel']['ip'], $this->config['channel']['port']);
}
$this->bindHandle();
try {
Worker::runAll();
} catch (\Exception $e) {
$output->warning($e->getMessage());
}
}
长链接事件配置
protected function bindHandle()
{
if (!is_null($this->workerServer)) {
$server = new WorkermanService($this->workerServer, $this->channelServer);
// 连接时回调
$this->workerServer->onConnect = [$server, 'onConnect'];
// 收到客户端信息时回调
$this->workerServer->onMessage = [$server, 'onMessage'];
// 进程启动后的回调
$this->workerServer->onWorkerStart = [$server, 'onWorkerStart'];
// 断开时触发的回调
$this->workerServer->onClose = [$server, 'onClose'];
}
if (!is_null($this->chatWorkerServer)) {
$chatServer = new ChatService($this->chatWorkerServer, $this->channelServer);
$this->chatWorkerServer->onConnect = [$chatServer, 'onConnect'];
$this->chatWorkerServer->onMessage = [$chatServer, 'onMessage'];
$this->chatWorkerServer->onWorkerStart = [$chatServer, 'onWorkerStart'];
$this->chatWorkerServer->onClose = [$chatServer, 'onClose'];
}
}
Was this helpful?
0 / 0