worker类分析:
1.构造方法
/** * Construct. * * @param string $socket_name * @param array $context_option */ public function __construct($socket_name = ‘‘, $context_option = array()) { // Save all worker instances. // 在这里目的就是当前woker对象hash化,并且存放到$_workers静态数组变量中,目的就是只要一次启动服务,所有的对象都只实例化一次,并且存放在内存中 $this->workerId = spl_object_hash($this); self::$_workers[$this->workerId] = $this; self::$_pidMap[$this->workerId] = array(); // Get autoload root path. // debug_backtrace()这个函数使用来追踪代码执行顺序,这里就是取得启动文件名,并且设置_autoloadRootPath路径为启动文件目录 $backtrace = debug_backtrace(); $this->_autoloadRootPath = dirname($backtrace[0][‘file‘]); // Context for socket. // 在这里是用来设置socket的context,可以用来设置ssl这样的加密通道 if ($socket_name) { $this->_socketName = $socket_name; if (!isset($context_option[‘socket‘][‘backlog‘])) { $context_option[‘socket‘][‘backlog‘] = self::DEFAULT_BACKLOG; } $this->_context = stream_context_create($context_option); } // Set an empty onMessage callback. // 设置一个空的回调函数 $this->onMessage = function () { }; }
2.当启动文件new Worker()运行完构造方法之后,最后运行了类中的静态变量Worker::runAll();
/** * Run all worker instances. * * @return void */ public static function runAll() { self::checkSapiEnv(); self::init(); self::parseCommand(); self::daemonize(); self::initWorkers(); self::installSignal(); self::saveMasterPid(); self::forkWorkers(); self::displayUI(); self::resetStd(); self::monitorWorkers(); }
3.接下来我们就一个个进入到这些方法中,来具体看看其中的各个实现。
self::checkSapiEnv
时间: 2024-10-16 00:56:01