Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b9e20051ef | |||
| 4ab6332176 | |||
| abe2dad521 | |||
| b0f70a13da | |||
| 1e8aca91dd | |||
| b4ac5c4758 | |||
| d161477957 | |||
| a26b99dd1e | |||
| 86e4a92ab0 | |||
| ea425bb82d | |||
| ad0154d319 | |||
| edb70d2b9b | |||
| 9f3355cab4 | |||
| 4107b5bb07 |
+1
-1
@@ -30,7 +30,7 @@
|
||||
"swiftmailer/swiftmailer": "v6.3.*",
|
||||
"psr/container": "^2.0",
|
||||
"psr/http-server-middleware": "1.0.1",
|
||||
"game-worker/kiri-event": "v1.0",
|
||||
"game-worker/kiri-event": "^v1.0",
|
||||
"ext-inotify": "*"
|
||||
},
|
||||
"autoload": {
|
||||
|
||||
+23
-2
@@ -3,8 +3,6 @@
|
||||
defined('APP_PATH') or define('APP_PATH', realpath(__DIR__ . '/../../'));
|
||||
|
||||
|
||||
use Note\Note;
|
||||
use Note\Route\Route;
|
||||
use Http\Handler\Router;
|
||||
use JetBrains\PhpStorm\Pure;
|
||||
use Kiri\Abstracts\Config;
|
||||
@@ -16,6 +14,8 @@ use Kiri\Events\EventDispatch;
|
||||
use Kiri\Events\EventProvider;
|
||||
use Kiri\Exception\ConfigException;
|
||||
use Kiri\Kiri;
|
||||
use Note\Note;
|
||||
use Note\Route\Route;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Swoole\Process;
|
||||
use Swoole\WebSocket\Server;
|
||||
@@ -900,6 +900,27 @@ if (!function_exists('di')) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
if (!function_exists('interval')) {
|
||||
|
||||
|
||||
/**
|
||||
* @param callable $callback
|
||||
* @param int $interval
|
||||
* @param bool $is
|
||||
*/
|
||||
function interval(callable $callback, int $interval = 1000, bool $is = false)
|
||||
{
|
||||
usleep($interval * 1000);
|
||||
|
||||
$callback();
|
||||
|
||||
interval($callback, $interval, $is);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
if (!function_exists('duplicate')) {
|
||||
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@ use Kiri\Kiri;
|
||||
use ReflectionException;
|
||||
use Server\ServerManager;
|
||||
use Server\Contract\OnTaskInterface;
|
||||
use Server\Tasker\AsyncTaskExecute;
|
||||
use Swoole\Table;
|
||||
|
||||
/**
|
||||
@@ -210,7 +211,7 @@ abstract class BaseApplication extends Component
|
||||
*/
|
||||
public function task(OnTaskInterface $execute): void
|
||||
{
|
||||
di(ServerManager::class)->task($execute);
|
||||
di(AsyncTaskExecute::class)->execute($execute);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ namespace Kiri;
|
||||
use Exception;
|
||||
use Kiri\Abstracts\Component;
|
||||
use Server\ServerManager;
|
||||
use Server\Tasker\AsyncTaskExecute;
|
||||
|
||||
/**
|
||||
* Class Async
|
||||
@@ -36,8 +37,8 @@ class Async extends Component
|
||||
*/
|
||||
public function dispatch(string $name, array $params = [])
|
||||
{
|
||||
$context = di(ServerManager::class);
|
||||
$context->task(static::$_absences[$name], $params);
|
||||
$context = di(AsyncTaskExecute::class);
|
||||
$context->execute(static::$_absences[$name], $params);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace Kiri\Core;
|
||||
|
||||
class Network
|
||||
{
|
||||
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public static function local(): string
|
||||
{
|
||||
return current(swoole_get_local_ip());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -261,7 +261,6 @@ class Container extends BaseObject implements ContainerInterface
|
||||
/**
|
||||
* @param $class
|
||||
* @return ReflectionClass
|
||||
* @throws ReflectionException
|
||||
*/
|
||||
private function resolveDependencies($class): ReflectionClass
|
||||
{
|
||||
|
||||
@@ -2,14 +2,15 @@
|
||||
|
||||
namespace Kiri\FileListen;
|
||||
|
||||
use Note\Inject;
|
||||
use Exception;
|
||||
use Kiri\Abstracts\Config;
|
||||
use Kiri\Error\Logger;
|
||||
use Kiri\Exception\ConfigException;
|
||||
use Kiri\Kiri;
|
||||
use Note\Inject;
|
||||
use Swoole\Coroutine;
|
||||
use Swoole\Process;
|
||||
use Swoole\Timer;
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
@@ -81,7 +82,8 @@ class HotReload extends Command
|
||||
}
|
||||
$this->trigger_reload();
|
||||
|
||||
var_dump(getmypid());
|
||||
Timer::tick(1000, fn() => $this->healthCheck());
|
||||
|
||||
Process::signal(SIGTERM, [$this, 'onSignal']);
|
||||
Process::signal(SIGKILL, [$this, 'onSignal']);
|
||||
|
||||
@@ -90,6 +92,22 @@ class HotReload extends Command
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @throws Exception
|
||||
*/
|
||||
public function healthCheck()
|
||||
{
|
||||
$pid = (int)file_get_contents(storage('.swoole.pid'));
|
||||
if (empty($pid)) {
|
||||
$this->logger->warning('service is shutdown you need reload.');
|
||||
$this->trigger_reload();
|
||||
} else if (!Process::kill($pid, 0)) {
|
||||
$this->logger->warning('service is shutdown you need reload.');
|
||||
$this->trigger_reload();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $data
|
||||
* @throws Exception
|
||||
@@ -138,9 +156,11 @@ class HotReload extends Command
|
||||
public function trigger_reload()
|
||||
{
|
||||
$this->logger->warning('change reload');
|
||||
$pid = $this->process?->pid;
|
||||
$pid = $this->process?->pid;
|
||||
$process = new Process(function (Process $process) {
|
||||
$process->exec(PHP_BINARY, [APP_PATH . "kiri.php", "sw:server", "restart"]);
|
||||
|
||||
$this->logger->warning('service stop.');
|
||||
});
|
||||
$process->start();
|
||||
if ($pid && Process::kill($pid, 0)) {
|
||||
|
||||
@@ -16,6 +16,7 @@ use Kiri\Di\Container;
|
||||
use Psr\Container\ContainerInterface;
|
||||
use ReflectionException;
|
||||
use Server\ServerManager;
|
||||
use Server\Tasker\AsyncTaskExecute;
|
||||
use Swoole\Coroutine;
|
||||
use Swoole\Process;
|
||||
use Swoole\WebSocket\Server;
|
||||
@@ -457,8 +458,8 @@ class Kiri
|
||||
*/
|
||||
public static function async(string $class, array $params = [])
|
||||
{
|
||||
$manager = di(ServerManager::class);
|
||||
$manager->task(new $class(...$params));
|
||||
$manager = di(AsyncTaskExecute::class);
|
||||
$manager->execute(new $class(...$params));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -49,3 +49,42 @@
|
||||
// after($process);
|
||||
//});
|
||||
|
||||
|
||||
var_dump(json_encode([
|
||||
"Datacenter" => "dc1",
|
||||
"Node" => "iz8vbi3edjyskl7kpuwudqz",
|
||||
"SkipNodeUpdate" => false,
|
||||
"Service" => [
|
||||
"ID" => "redis1",
|
||||
"Service" => "FriendRpcService",
|
||||
"Address" => "172.26.221.211",
|
||||
"TaggedAddresses" => [
|
||||
"lan" => [
|
||||
"address" => "127.0.0.1",
|
||||
"port" => 9627
|
||||
],
|
||||
"wan" => [
|
||||
"address" => "172.26.221.211",
|
||||
"port" => 9627
|
||||
]
|
||||
],
|
||||
"Meta" => [
|
||||
"redis_version" => "4.0"
|
||||
],
|
||||
"Port" => 9627
|
||||
],
|
||||
"Check" => [
|
||||
"Node" => "iz8vbi3edjyskl7kpuwudqz",
|
||||
"CheckId" => "service:redis1",
|
||||
"Name" => "Redis health check",
|
||||
"Notes" => "Script based health check",
|
||||
"Status" => "passing",
|
||||
"ServiceID" => "redis1",
|
||||
"Definition" => [
|
||||
"Http" => "http://172.26.221.211:9627",
|
||||
"Interval" => "5s",
|
||||
"Timeout" => "1s",
|
||||
"DeregisterCriticalServiceAfter" => "30s"
|
||||
],
|
||||
],
|
||||
]));
|
||||
|
||||
Reference in New Issue
Block a user