mirror of
https://github.com/zhamao-robot/zhamao-framework.git
synced 2026-07-24 09:05:34 +08:00
add --watch function for no-installed-inotify users
This commit is contained in:
@@ -54,7 +54,20 @@ class ConsoleApplication extends Application
|
|||||||
|
|
||||||
_zm_env_check();
|
_zm_env_check();
|
||||||
|
|
||||||
|
// 定义多进程的全局变量
|
||||||
|
define('ZM_PROCESS_MASTER', 1);
|
||||||
|
define('ZM_PROCESS_MANAGER', 2);
|
||||||
|
define('ZM_PROCESS_WORKER', 4);
|
||||||
|
define('ZM_PROCESS_USER', 8);
|
||||||
|
define('ZM_PROCESS_TASKWORKER', 16);
|
||||||
|
|
||||||
define("WORKING_DIR", getcwd());
|
define("WORKING_DIR", getcwd());
|
||||||
|
|
||||||
|
|
||||||
|
if (!is_dir(_zm_pid_dir())) {
|
||||||
|
@mkdir(_zm_pid_dir());
|
||||||
|
}
|
||||||
|
|
||||||
if (Phar::running() !== "") {
|
if (Phar::running() !== "") {
|
||||||
echo "* Running in phar mode.\n";
|
echo "* Running in phar mode.\n";
|
||||||
define("SOURCE_ROOT_DIR", Phar::running());
|
define("SOURCE_ROOT_DIR", Phar::running());
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ use ZM\Event\SwooleEvent;
|
|||||||
use ZM\Framework;
|
use ZM\Framework;
|
||||||
use ZM\Store\ZMBuf;
|
use ZM\Store\ZMBuf;
|
||||||
use ZM\Utils\DataProvider;
|
use ZM\Utils\DataProvider;
|
||||||
|
use ZM\Utils\Manager\ProcessManager;
|
||||||
use ZM\Utils\SignalListener;
|
use ZM\Utils\SignalListener;
|
||||||
use ZM\Utils\Terminal;
|
use ZM\Utils\Terminal;
|
||||||
use ZM\Utils\ZMUtil;
|
use ZM\Utils\ZMUtil;
|
||||||
@@ -28,15 +29,20 @@ use ZM\Utils\ZMUtil;
|
|||||||
*/
|
*/
|
||||||
class OnManagerStart implements SwooleEvent
|
class OnManagerStart implements SwooleEvent
|
||||||
{
|
{
|
||||||
/** @var null|Process */
|
private static $last_hash = "";
|
||||||
public static $process = null;
|
private static $watch = -1;
|
||||||
|
|
||||||
public function onCall(Server $server) {
|
public function onCall(Server $server) {
|
||||||
Console::debug("Calling onManagerStart event(1)");
|
Console::debug("Calling onManagerStart event(1)");
|
||||||
if (!Framework::$argv["disable-safe-exit"]) {
|
if (!Framework::$argv["disable-safe-exit"]) {
|
||||||
SignalListener::signalManager();
|
SignalListener::signalManager();
|
||||||
}
|
}
|
||||||
self::$process = new Process(function() {
|
Framework::saveProcessState(ZM_PROCESS_MANAGER, $server->manager_pid);
|
||||||
|
|
||||||
|
ProcessManager::createUserProcess('monitor', function() use ($server){
|
||||||
|
Process::signal(SIGINT, function() {
|
||||||
|
Console::success("用户进程检测到了Ctrl+C");
|
||||||
|
});
|
||||||
if (Framework::$argv["watch"]) {
|
if (Framework::$argv["watch"]) {
|
||||||
if (extension_loaded('inotify')) {
|
if (extension_loaded('inotify')) {
|
||||||
Console::info("Enabled File watcher, framework will reload automatically.");
|
Console::info("Enabled File watcher, framework will reload automatically.");
|
||||||
@@ -48,10 +54,27 @@ class OnManagerStart implements SwooleEvent
|
|||||||
Console::verbose("File updated: " . $r[0]["name"]);
|
Console::verbose("File updated: " . $r[0]["name"]);
|
||||||
ZMUtil::reload();
|
ZMUtil::reload();
|
||||||
});
|
});
|
||||||
|
Framework::$argv["polling-watch"] = false; // 如果开启了inotify则关闭轮询热更新
|
||||||
} else {
|
} else {
|
||||||
Console::warning(zm_internal_errcode("E00024") . "You have not loaded \"inotify\" extension, please install first.");
|
Console::warning(zm_internal_errcode("E00024") . "你还没有安装或启用 inotify 扩展,将默认使用轮询检测模式开启热更新!");
|
||||||
|
Framework::$argv["polling-watch"] = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (Framework::$argv["polling-watch"]) {
|
||||||
|
self::$watch = swoole_timer_tick(3000, function () use ($server) {
|
||||||
|
$data = (DataProvider::scanDirFiles(DataProvider::getSourceRootDir() . '/src/'));
|
||||||
|
$hash = md5("");
|
||||||
|
foreach ($data as $file) {
|
||||||
|
$hash = md5($hash . md5_file($file));
|
||||||
|
}
|
||||||
|
if (self::$last_hash == "") {
|
||||||
|
self::$last_hash = $hash;
|
||||||
|
} elseif (self::$last_hash !== $hash) {
|
||||||
|
self::$last_hash = $hash;
|
||||||
|
$server->reload();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
if (Framework::$argv["interact"]) {
|
if (Framework::$argv["interact"]) {
|
||||||
Console::info("Interact mode");
|
Console::info("Interact mode");
|
||||||
ZMBuf::$terminal = $r = STDIN;
|
ZMBuf::$terminal = $r = STDIN;
|
||||||
@@ -73,8 +96,16 @@ class OnManagerStart implements SwooleEvent
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
self::$process->set(['enable_coroutine' => true]);
|
|
||||||
self::$process->start();
|
ProcessManager::getUserProcess('monitor')->set(['enable_coroutine' => true]);
|
||||||
|
ProcessManager::getUserProcess('monitor')->start();
|
||||||
|
|
||||||
|
/*$dispatcher = new EventDispatcher(OnManagerStartEvent::class);
|
||||||
|
$dispatcher->setRuleFunction(function($v) {
|
||||||
|
return eval("return " . $v->getRule() . ";");
|
||||||
|
});
|
||||||
|
$dispatcher->dispatchEvents($server);
|
||||||
|
*/
|
||||||
Console::verbose("进程 Manager 已启动");
|
Console::verbose("进程 Manager 已启动");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user