This commit is contained in:
2021-08-17 18:35:11 +08:00
parent aab596d14d
commit 1cb36c8707
4 changed files with 38 additions and 24 deletions
+4 -1
View File
@@ -13,7 +13,10 @@ class OnWorkerError
/**
* @param Server $server
* @param int $workerId
* @param int $worker_id
* @param int $worker_pid
* @param int $exit_code
* @param int $signal
*/
public function __construct(Server $server, int $worker_id, int $worker_pid, int $exit_code, int $signal)
{
+13 -12
View File
@@ -79,7 +79,7 @@ class ServerManager
*/
public function addListener(string $type, string $host, int $port, int $mode, array $settings = [])
{
if ($this->portIsAlready($port)) $this->stopServer($port);
if ($this->checkPortIsAlready($port)) $this->stopServer($port);
if (!$this->server) {
$this->createBaseServer($type, $host, $port, $mode, $settings);
} else {
@@ -94,6 +94,7 @@ class ServerManager
/**
* @throws NotFindClassException
* @throws ReflectionException
* @throws ConfigException
*/
public function initBaseServer($configs, int $daemon = 0): void
{
@@ -107,18 +108,18 @@ class ServerManager
/**
* @param $port
* @return bool
* @throws Exception
* @throws ConfigException
*/
private function checkPort($port): bool
public function isRunner(): bool
{
if (Kiri::getPlatform()->isLinux()) {
exec('netstat -tunlp | grep ' . $port, $output);
} else {
exec('lsof -i :' . $port . ' | grep -i "LISTEN"', $output);
$configs = Config::get('server', [], true);
foreach ($this->sortService($configs['ports']) as $config) {
if ($this->checkPortIsAlready($config['port'])) {
return true;
}
}
return !empty($output);
return false;
}
@@ -310,10 +311,10 @@ class ServerManager
*/
public function stopServer(int $port)
{
if (!($pid = $this->portIsAlready($port))) {
if (!($pid = $this->checkPortIsAlready($port))) {
return;
}
while ($this->portIsAlready($port)) {
while ($this->checkPortIsAlready($port)) {
exec('kill ' . $pid, $execResult);
usleep(300);
}
@@ -324,7 +325,7 @@ class ServerManager
* @param $port
* @return bool|string
*/
private function portIsAlready($port): bool|string
private function checkPortIsAlready($port): bool|string
{
if (!Kiri::getPlatform()->isLinux()) {
exec("lsof -i :" . $port . " | grep -i 'LISTEN' | awk '{print $2}'", $output);
+3 -5
View File
@@ -38,13 +38,11 @@ class Command extends \Console\Command
if (!in_array($dtl->get('action'), self::ACTIONS)) {
return 'I don\'t know what I want to do.';
}
/** @var Shutdown $shutdown */
$shutdown = Kiri::app()->get('shutdown');
if ($shutdown->isRunning() && $dtl->get('action') == 'start') {
if ($manager->isRunner() && $dtl->get('action') == 'start') {
return 'Service is running. Please use restart.';
}
$shutdown->shutdown();
$manager->shutdown();
if ($dtl->get('action') == 'stop') {
return 'shutdown success.';
}
+18 -6
View File
@@ -6,16 +6,15 @@ namespace Http;
use Exception;
use Http\Abstracts\HttpService;
use JetBrains\PhpStorm\Pure;
use ReflectionException;
use Rpc\Service;
use Server\Constant;
use Server\ServerManager;
use Kiri\Abstracts\Config;
use Kiri\Error\LoggerProcess;
use Kiri\Exception\ConfigException;
use Kiri\Exception\NotFindClassException;
use Kiri\Process\Biomonitoring;
use Kiri\Kiri;
use ReflectionException;
use Rpc\Service;
use Server\Constant;
use Server\ServerManager;
use Swoole\Runtime;
@@ -123,7 +122,20 @@ class Server extends HttpService
*/
public function shutdown()
{
$this->manager->stopServer(0);
$configs = Config::get('server', [], true);
foreach ($configs['ports'] ?? [] as $config) {
$this->manager->stopServer($config['port']);
}
}
/**
* @return bool
* @throws ConfigException
*/
public function isRunner(): bool
{
return $this->manager->isRunner();
}