Răsfoiți Sursa

增加worker文件位置配置

walkor 12 ani în urmă
părinte
comite
63f92149ae
4 a modificat fișierele cu 29 adăugiri și 8 ștergeri
  1. 2 2
      man/Core/AbstractWorker.php
  2. 10 1
      man/Core/Lib/Checker.php
  3. 15 3
      man/Core/Master.php
  4. 2 2
      man/Core/SocketWorker.php

+ 2 - 2
man/Core/AbstractWorker.php

@@ -63,9 +63,9 @@ abstract class AbstractWorker
      * 构造函数,主要是初始化信号处理函数
      * @return void
      */
-    public function __construct()
+    public function __construct($worker_name = null)
     {
-        $this->workerName = get_class($this);
+        $this->workerName = $worker_name ? $worker_name : get_class($this);
         $this->installSignal();
         $this->addShutdownHook();
     }

+ 10 - 1
man/Core/Lib/Checker.php

@@ -115,7 +115,16 @@ class Checker
             $total_worker_count += $config['start_workers'];
     
             // 语法检查
-            if(0 != self::checkSyntaxError(WORKERMAN_ROOT_DIR . "workers/$worker_name.php", $worker_name))
+            if($worker_file = \Man\Core\Lib\Config::get($worker_name.'.worker_file'))
+            {
+                $class_name = basename($worker_file, '.php');
+            }
+            else
+            {
+                $worker_file = WORKERMAN_ROOT_DIR . "workers/$worker_name.php";
+                $class_name = $worker_name;
+            }
+            if(0 != self::checkSyntaxError($worker_file, $class_name))
             {
                 unset(Config::instance()->config[$worker_name]);
                 \Man\Core\Master::notice("$worker_name has Fatal Err");

+ 15 - 3
man/Core/Master.php

@@ -401,9 +401,21 @@ class Master
             // 尝试设置子进程进程名称
             self::setWorkerProcessTitle($worker_name);
     
-            // 创建worker实例
-            include_once WORKERMAN_ROOT_DIR . "workers/$worker_name.php";
-            $worker = new $worker_name();
+            // 查找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 = new $class_name($worker_name);
+            
             // 如果该worker有配置监听端口,则将监听端口的socket传递给子进程
             if(isset(self::$listenedSockets[$worker_name]))
             {

+ 2 - 2
man/Core/SocketWorker.php

@@ -152,10 +152,10 @@ abstract class SocketWorker extends AbstractWorker
      * @param string $protocol
      * @return void
      */
-    public function __construct()
+    public function __construct($worker_name = null)
     {
         // worker name
-        $this->workerName = get_class($this);
+        $this->workerName = $worker_name ? $worker_name : get_class($this);
         
         // 是否开启长连接
         $this->isPersistentConnection = (bool)Lib\Config::get( $this->workerName . '.persistent_connection');