瀏覽代碼

增加锁机制Mutex 和 worker语法检查

liangl 11 年之前
父節點
當前提交
6ce1f23801
共有 1 個文件被更改,包括 21 次插入15 次删除
  1. 21 15
      man/Core/Master.php

+ 21 - 15
man/Core/Master.php

@@ -4,6 +4,7 @@ require_once WORKERMAN_ROOT_DIR . 'man/Core/Lib/Checker.php';
 require_once WORKERMAN_ROOT_DIR . 'man/Core/Lib/Config.php';
 require_once WORKERMAN_ROOT_DIR . 'man/Core/Lib/Task.php';
 require_once WORKERMAN_ROOT_DIR . 'man/Core/Lib/Log.php';
+require_once WORKERMAN_ROOT_DIR . 'man/Core/Lib/Mutex.php';
 
 if(!defined('WORKERMAN_ROOT_DIR'))
 {
@@ -151,7 +152,7 @@ class Master
     public static function run()
     {
         // 输出信息
-        self::notice("Workerman is starting ...", true);
+        self::notice("Server is starting ...", true);
         // 初始化
         self::init();
         // 检查环境
@@ -167,7 +168,7 @@ class Master
         // 创建worker进程
         self::createWorkers();
         // 输出信息
-        self::notice("Workerman start success ...", true);
+        self::notice("Server start success ...", true);
         // 标记sever状态为运行中...
         self::$serverStatus = self::STATUS_RUNNING;
         // 关闭标准输出
@@ -279,7 +280,7 @@ class Master
         // 保存到文件中,用于实现停止、重启
         if(false === @file_put_contents(WORKERMAN_PID_FILE, self::$masterPid))
         {
-            exit("\033[31;40mCan not save pid to pid-file(" . WORKERMAN_PID_FILE . ")\033[0m\n\n\033[31;40mWorkerman start fail\033[0m\n\n");
+            exit("\033[31;40mCan not save pid to pid-file(" . WORKERMAN_PID_FILE . ")\033[0m\n\n\033[31;40mServer start fail\033[0m\n\n");
         }
         
         // 更改权限
@@ -313,8 +314,8 @@ class Master
                 self::$listenedSockets[$worker_name] = stream_socket_server($config['listen'], $error_no, $error_msg, $flags);
                 if(!self::$listenedSockets[$worker_name])
                 {
-                    Lib\Log::add("can not create socket {$config['listen']} info:{$error_no} {$error_msg}\tWorkerman start fail");
-                    exit("\n\033[31;40mcan not create socket {{$config['listen']} info:{$error_no} {$error_msg}\033[0m\n\n\033[31;40mWorkerman start fail\033[0m\n\n");
+                    Lib\Log::add("can not create socket {$config['listen']} info:{$error_no} {$error_msg}\tServer start fail");
+                    exit("\n\033[31;40mcan not create socket {{$config['listen']} info:{$error_no} {$error_msg}\033[0m\n\n\033[31;40mServer start fail\033[0m\n\n");
                 }
             }
         }
@@ -404,15 +405,21 @@ class Master
             // 查找worker文件
             if($worker_file = \Man\Core\Lib\Config::get($worker_name.'.worker_file'))
             {
-                include_once $worker_file;
                 $class_name = basename($worker_file, '.php');
             }
             else
             {
                 $class_name = $worker_name;
-                include_once WORKERMAN_ROOT_DIR . "workers/$worker_name.php";
+                $worker_file = WORKERMAN_ROOT_DIR . "workers/$worker_name.php";
             }
             
+            // 如果有语法错误 sleep 5秒 避免狂刷日志
+            if(\Man\Core\Lib\Checker::checkSyntaxError($worker_file, $class_name))
+            {
+                sleep(5);
+            }
+            require_once $worker_file;
+            
             // 创建实例
             $worker = new $class_name($worker_name);
             
@@ -445,7 +452,7 @@ class Master
         pcntl_signal(SIGINT,  array('\Man\Core\Master', 'signalHandler'), false);
         // 设置SIGUSR1信号处理函数,测试用
         pcntl_signal(SIGUSR1, array('\Man\Core\Master', 'signalHandler'), false);
-        // 设置SIGUSR2信号处理函数,平滑重启Workerman
+        // 设置SIGUSR2信号处理函数,平滑重启Server
         pcntl_signal(SIGHUP, array('\Man\Core\Master', 'signalHandler'), false);
         // 设置子进程退出信号处理函数
         pcntl_signal(SIGCHLD, array('\Man\Core\Master', 'signalHandler'), false);
@@ -473,7 +480,6 @@ class Master
         pcntl_signal(SIGINT, SIG_IGN);
         pcntl_signal(SIGUSR1, SIG_IGN);
         pcntl_signal(SIGHUP, SIG_IGN);
-        pcntl_signal(SIGCHLD, SIG_IGN);
     }
     
     /**
@@ -488,7 +494,7 @@ class Master
         {
             // 停止server信号
             case SIGINT:
-                self::notice("Workerman is shutting down");
+                self::notice("Server is shutting down");
                 self::stop();
                 break;
             // 测试用
@@ -502,7 +508,7 @@ class Master
             // 平滑重启server信号
             case SIGHUP:
                 Lib\Config::reload();
-                self::notice("Workerman reloading");
+                self::notice("Server reloading");
                 self::addToRestartWorkers(array_keys(self::getPidWorkerNameMap()));
                 self::restartWorkers();
                 break;
@@ -578,7 +584,7 @@ class Master
                 // 没有子进程了,可能是出现Fatal Err 了
                 if(pcntl_get_last_error() == 10)
                 {
-                    self::notice('Workerman has no workers now');
+                    self::notice('Server has no workers now');
                 }
                 return -1;
             }
@@ -621,7 +627,7 @@ class Master
                     // 删除共享内存
                     self::removeShmAndQueue();
                     // 发送提示
-                    self::notice("Workerman stoped");
+                    self::notice("Server stoped");
                     // 删除pid文件
                     @unlink(WORKERMAN_PID_FILE);
                     exit(0);
@@ -881,7 +887,7 @@ class Master
         // >=php 5.5
         if (version_compare(phpversion(), "5.5", "ge") && function_exists('cli_set_process_title'))
         {
-            @cli_set_process_title($title);
+            cli_set_process_title($title);
         }
         // 需要扩展
         elseif(extension_loaded('proctitle') && function_exists('setproctitle'))
@@ -898,7 +904,7 @@ class Master
      */
     public static function notice($msg, $display = false)
     {
-        Lib\Log::add("Workerman:".$msg);
+        Lib\Log::add("Server:".$msg);
         if($display)
         {
             if(self::$serverStatus == self::STATUS_STARTING)