This commit is contained in:
as2252258@163.com
2021-07-26 03:56:44 +08:00
parent 47bf22324b
commit 4a80ba1351
+24 -16
View File
@@ -75,6 +75,7 @@ class ServerManager extends Abstracts\Server
*/ */
public function addListener(string $type, string $host, int $port, int $mode, array $settings = []) public function addListener(string $type, string $host, int $port, int $mode, array $settings = [])
{ {
if ($this->checkPort($port)) $this->stopServer($port);
if (!$this->server) { if (!$this->server) {
$this->createBaseServer($type, $host, $port, $mode, $settings); $this->createBaseServer($type, $host, $port, $mode, $settings);
} else { } else {
@@ -94,9 +95,6 @@ class ServerManager extends Abstracts\Server
{ {
$context = ServerManager::getContext(); $context = ServerManager::getContext();
foreach ($this->sortService($configs['ports']) as $config) { foreach ($this->sortService($configs['ports']) as $config) {
if ($this->checkPort($config['port'])) {
$this->stopServer($config['port']);
}
$this->startListenerHandler($context, $config); $this->startListenerHandler($context, $config);
} }
$this->addServerEventCallback($this->getSystemEvents($configs)); $this->addServerEventCallback($this->getSystemEvents($configs));
@@ -205,7 +203,7 @@ class ServerManager extends Abstracts\Server
private function startListenerHandler(ServerManager $context, array $config) private function startListenerHandler(ServerManager $context, array $config)
{ {
if ($this->server) { if ($this->server) {
$context->addNewListener($config['type'], $config['host'], $config['port'], $config['mode'], $config); $context->addListener($config['type'], $config['host'], $config['port'], $config['mode'], $config);
} else { } else {
$config['settings'] = $config['settings'] ?? []; $config['settings'] = $config['settings'] ?? [];
if (!isset($config['settings']['log_file'])) { if (!isset($config['settings']['log_file'])) {
@@ -215,7 +213,7 @@ class ServerManager extends Abstracts\Server
$config['settings']['pid_file'] = storage('swoole.pid'); $config['settings']['pid_file'] = storage('swoole.pid');
} }
$config['events'] = $config['events'] ?? []; $config['events'] = $config['events'] ?? [];
$context->createBaseServer($config['type'], $config['host'], $config['port'], $config['mode'], $config); $context->addListener($config['type'], $config['host'], $config['port'], $config['mode'], $config);
} }
} }
@@ -292,26 +290,36 @@ class ServerManager extends Abstracts\Server
} }
/**
* @param int $port
*/
public function stopServer(int $port) public function stopServer(int $port)
{ {
exec('netstat -lnp | grep ' . $port . ' | grep "LISTEN" | awk \'{print $7}\'', $output); if (!($pid = $this->portIsAready($port))) {
if (empty($output)) {
return; return;
} }
$explode = explode('/', $output[0]); exec('kill -15 ' . $pid, $execResult);
while ($this->portIsAready($port)) {
exec('kill -15 ' . $explode[0], $execResult); usleep(100);
while (true) {
exec('netstat -lnp | grep ' . $port . ' | grep "LISTEN" | awk \'{print $7}\'', $output);
var_dump($output);
if (empty($output)) {
return;
}
} }
} }
/**
* @param $port
* @return bool
*/
private function portIsAready($port): bool|string
{
exec('netstat -lnp | grep ' . $port . ' | grep "LISTEN" | awk \'{print $7}\'', $output);
if (empty($output)) {
return false;
}
return explode('/', $output[0])[0];
}
/** /**
* @param string $type * @param string $type
* @param array $settings * @param array $settings