protected function start()
{
if ($this->getPid()) {
echo 'already running' . PHP_EOL;
exit(1);
}
$mode = config('laravoole.base_config.mode');
if (!$mode) {
echo "Laravoole needs Swoole or Workerman." . PHP_EOL . "You can install Swoole by command:" . PHP_EOL . " pecl install swoole" . PHP_EOL . "Or you can install Workerman by command:" . PHP_EOL . " composer require workerman/workerman" . PHP_EOL;
exit;
}
$wrapper = "Laravoole\\Wrapper\\{$mode}Wrapper";
$handler_config = [];
$params = $wrapper::getParams();
foreach ($params as $paramName => $default) {
if (is_int($paramName)) {
$paramName = $default;
$default = null;
}
$key = $paramName;
$value = config("laravoole.handler_config.{$key}", function () use($key, $default) {
return env("LARAVOOLE_" . strtoupper($key), $default);
});
if ($value !== null) {
if ((is_array($value) || is_object($value)) && is_callable($value)) {
$value = $value();
}
$handler_config[$paramName] = $value;
}
}
if (!strcasecmp('SwooleFastCGI', $mode)) {
$handler_config['dispatch_mode'] = 2;
}
global $argv;
$configs = ['host' => config('laravoole.base_config.host'), 'port' => config('laravoole.base_config.port'), 'mode' => config('laravoole.base_config.mode'), 'pid_file' => config('laravoole.base_config.pid_file'), 'root_dir' => base_path(), 'handler_config' => $handler_config, 'wrapper_config' => config('laravoole.wrapper_config'), 'argv' => $argv];
$handle = popen('/usr/bin/env php ' . __DIR__ . '/../../src/Entry.php', 'w');
fwrite($handle, serialize($configs));
fclose($handle);
}